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 TextBox
skryť Label
a 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ť.