/ / transparentné textové pole nezobrazujúce text po opustení textového poľa - c #, formulárov, textového poľa

transparentné textové pole nezobrazuje text po opustení textového poľa - c #, formuláre, textové pole

Urobil som túto triedu pre transparentné textbox

public partial class TransTextBox : TextBox
{
public TransTextBox()
{
SetStyle(ControlStyles.SupportsTransparentBackColor |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.ResizeRedraw |
ControlStyles.UserPaint, true);
BackColor = Color.Transparent;
}
}

ale keď opustím textbox, text zmizne, ale stále je tam. Ako to opraviť?

odpovede:

0 pre odpoveď č. 1

Čo môžete urobiť, je odstrániť vaše ControlStyles.OptimizedDoubleBuffer a potom text prekresliť podľa DrawString na OnPaint udalosť

Niečo také:

public partial class TransTextBox : TextBox {
public TransTextBox() {
SetStyle(ControlStyles.SupportsTransparentBackColor |
//ControlStyles.OptimizedDoubleBuffer | //comment this flag out
ControlStyles.AllPaintingInWmPaint |
ControlStyles.ResizeRedraw |
ControlStyles.UserPaint, true);
BackColor = Color.Transparent;
}

private void redrawText() {
using (Graphics graphics = this.CreateGraphics())
using (SolidBrush brush = new SolidBrush(this.ForeColor))
graphics.DrawString(this.Text, this.Font, brush, 1, 1); //play around with how you draw string more to suit your original
}

protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
redrawText();
}
}

Ak používate DoubleBuffer, aj keď prekreslíte reťazec, váš reťazec dostane dvojnásobne „vymazané“.


0 pre odpoveď č. 2

Máte dve možnosti.

Môžete vytvoriť objekt, ktorý obsahuje znak a TextBox a Label a zaostrenie vstupuje do TextBoxskryť Labela keď zaostrenie opustí TextBox, ukázať Label, To vám teraz opraví vaše aktuálne nastavenie.

Priamy prístup by mohol byť niečo takéto:

public class TransTextBox
{
BackColor = this.Parent.BackColor;
}

Ak sa však farba pozadia zmení, je potrebné to znova zavolať.