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 № 1Was 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 DoubleBuffer
Wenn 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 Label
und 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.