在每个文本框c#winform中绘制一个矩形

时间:2013-01-17 11:51:28

标签: c# winforms textbox drawrectangle

我想区分表单中的强制TextBox字段。我通过使用每个表单调用的方法创建一个类来实现这一目标。该方法的作用是接收文本框列表,并为每个文本框设置背景颜色。

public static void Mostrar_campos_obligatorios(List<TextBox> lista_textbox)
{
    foreach (TextBox tbx in lista_textbox)
    {
        tbx.Paint += new PaintEventHandler(TextBoxRectangle);
    }
}

我现在已经更改了GUI,我不喜欢在背景颜色改变时的样子,然后我想绘制一个矩形,如下图所示:

enter image description here

给我留下渐变的东西,我只是需要帮助来绘制一个与每个TextBox相同高度的矩形,并位于它的末尾。我也想使用该方法定义(我的意思是,要接收文本框列表)。

请注意,这些方法是静态的。

我试过这样的事情:

public static void TextBoxRectangle(object sender, PaintEventArgs e)
{
    tbx = (TextBox)sender;
    Color c1 = Color.FromArgb(255, 113, 255, 0);
    Color c2 = Color.FromArgb(255, 2, 143, 17);

    LinearGradientBrush br = new LinearGradientBrush(e.CellBounds, c1, c2, 90, true);

    ColorBlend cb = new ColorBlend();
    cb.Positions = new[] { 0, (float)1 };
    cb.Colors = new[] { c1, c2 };

    br.InterpolationColors = cb;

    Rectangle rect = new Rectangle(tbx.Location.X + 4, tbx.Location.Y + 4, 13, 13);

    e.Graphics.FillRectangle(br, rect);
}

但是没有用。它甚至无法访问TextBoxRectangle()。我想我做错了..

2 个答案:

答案 0 :(得分:0)

public static void Mostrar_campos_obligatorios(List<TextBox> lista_textbox, PaintEventHandler eventHandler)
{
    foreach (TextBox tbx in lista_textbox)
    {
        tbx.Paint += new PaintEventHandler(eventHandler);
    }
}

...

Mostrar_campos_obligatorios(lista_textbox, new PaintEventHandler(TextBoxRectangle));

答案 1 :(得分:0)

我的建议是: 不要使用复杂的逻辑来绘制矩形。 难道你不能简单地在文本框中放置一个看起来像你在问题中显示的矩形的背景图片吗?。无需绘制矩形和东西。

图像可以是任何渐变/非渐变。