Я попытался изменить внешний вид пользовательского TextBox в WinForms, переопределив метод OnPaint или / и WndProc. Но в обоих случаях, прежде чем мой метод будет запущен, Windows уже рисует базовый TextBox.
Что здесь нарисовано
И что делает мой метод, он рисует поверх него.
Итак, вы знаете какое-нибудь решение этой проблемы?
Документация говорит, что это может быть недостижимо (ссылка ниже :)
https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/constituent-controls
public class TestTextBox : TextBox
{
public TestTextBox() : base ()
{
SetStyle(ControlStyles.UserPaint, true);
InitializeComponents();
}
protected override void OnPaint(PaintEventArgs e)
{
// base.OnPaint(e);
e.Graphics.DrawLine(new Pen(Color.Blue),10,10,70,10);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// base.OnPaintBackground(pevent);
pevent.Graphics.DrawLine(new Pen(Color.Red),10,10,90,10);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PAINT)
{
Graphics g = this.CreateGraphics();
g.DrawLine(new Pen(Color.BlueViolet), 10, 10, 70, 10);
}
else
{
base.WndProc(ref m);
}
}
private void InitializeComponents()
{
this.BackColor = Color.Black;
this.ForeColor = Color.White;
}
}