0

フォーム内の必須の TextBox フィールドを区別したいと考えています。すべてのフォームから呼び出されるメソッドを持つクラスを作成することで、これを達成していました。そのメソッドが行うことは、テキストボックスのリストを受け取り、それぞれに対して背景色を別の色に設定することです。

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

GUI を変更しましたが、背景色が変更されたときの見た目が気に入らないので、次の図に示すように四角形を描きたいと思いました。

ここに画像の説明を入力

グラデーションのことは私に任せてください。各 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()。私はそれを非常に間違っていると思います..

4

2 に答える 2

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));
于 2013-01-17T12:23:53.093 に答える
0

私の提案は次のとおりです。複雑なロジックを使用して長方形を描画しないでください。質問で示した長方形のように見える背景画像をテキストボックスに単純に配置することはできませんか? . 長方形などを描く必要はありません。

画像はグラデーション/グラデーションでなくてもかまいません。

于 2013-01-17T12:29:16.527 に答える