/ / transparente Textbox zeigt keinen Text an, nachdem ich den Textkasten verlassen habe - c #, Formulare, Textbox

transparente Textbox zeigt keinen Text, nachdem ich den Textkasten verlassen habe - c #, Formulare, Textbox

Ich habe diese Klasse für transparente Textbox gemacht

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

aber als ich die Textbox verlasse verschwindet der Text aber ist immer noch da. Wie man es repariert?

Antworten:

0 für die Antwort № 1

Was Sie tun können, ist das Entfernen Ihrer ControlStyles.OptimizedDoubleBuffer markieren und dann den Text neu zeichnen DrawString auf der OnPaint Veranstaltung

Etwas wie das:

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();
}
}

Wenn du benutzt DoubleBufferWenn Sie die Zeichenkette neu zeichnen, wird Ihre Zeichenkette durch das Doppelte "gelöscht".


0 für die Antwort № 2

Sie haben zwei Möglichkeiten.

Sie können ein Objekt erstellen, das ein enthält TextBox und Label und der Fokus geht in die TextBox, Verstecke das Labelund wenn der Fokus das verlässt TextBox, zeige den Label. Das wird jetzt dein aktuelles Setup fixieren.

Ich direkter Ansatz könnte in etwa so aussehen:

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

Ändert sich jedoch die Hintergrundfarbe, muss diese erneut aufgerufen werden.