【解決方法】C#でテキストボックスのBorderColorを変更するには?


こんにちは、みんな、

Textbox Click 時に Textbox Border Color を変更する必要があります。
体がこれを行う方法を知っている場合は、私に知らせてください。

form_load イベントで試してみましたが、フォーム内のすべてのテキスト ボックスに適用されます。

特定の Textbox クリックでそれが必要です。

よろしく、
パワン。

解決策 3

内なる出来事に働きかけるために TextBox、あなたから直接 UserControl、必要なイベントを公開できます。 このアイデアの実装例を次に示します。

C#
public partial class TextBoxEx : UserControl
{
    // The TextBox
    private TextBox textBox = new TextBox();

    // Border color of the textbox
    private Color borderColor = Color.Gray;

    // Ctor
    public TextBoxEx()
    {
        InitializeComponent();
        this.Paint += new PaintEventHandler(TextBoxEx_Paint);
        this.Resize += new EventHandler(TextBoxEx_Resize);
        textBox.Multiline = true;
        textBox.BorderStyle = BorderStyle.None;
        this.Controls.Add(textBox);

        InvalidateSize();
    }

    // Exposed properties of the textbox
    public override string Text
    {
        get { return textBox.Text; }
        set { textBox.Text = value; }
    }
    // ... Expose other properties you need...

    // The border color property
    public Color BorderColor
    {
        get { return borderColor; }
        set { borderColor = value; Invalidate(); }
    }

    // Expose the Click event for the texbox
    public event EventHandler TextBoxClick
    {
        add { textBox.Click += value; }
        remove { textBox.Click -= value; }
    }
    // ... Expose other events you need...

    private void TextBoxEx_Resize(object sender, EventArgs e)
    {
        InvalidateSize();
    }
    private void TextBoxEx_Paint(object sender, PaintEventArgs e)
    {
        ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, borderColor, ButtonBorderStyle.Solid);
    }
    private void InvalidateSize()
    {
        textBox.Size = new Size(this.Width - 2, this.Height - 2);
        textBox.Location = new Point(1, 1);
    }
}

これで、VS デザイナからでもこのイベントを使用できるようになりました。 公開されたイベントのイベント ハンドラーの例を次に示します。

C#
private void textBoxEx1_TextBoxClick(object sender, EventArgs e)
{
    // Change the border color on click
    textBoxEx1.BorderColor = Color.Red;
}

別の方法は、全体を公開することです TextBox ユーザーコントロールのパブリックプロパティとして、必要に応じてそのイベントにサブスクライブします。
例:

C#
public partial class TextBoxEx : UserControl
{
    // The TextBox
    private TextBox textBox = new TextBox();

    // Expose the entire TextBox
    public TextBox InnerTextBox { get {return textBox ; } }
}

これを行った後、(疑似コード) のような任意のイベントを購読できます。
textBoxEx.InnerTextBox.EventOfYourChoice += ...

🙂

解決策 2

いくつかのオプションがあります:

1) 手っ取り早いアプローチ: Label の後ろ TextBox ラベルを少し大きくします TextBox. 使用 BackColor のプロパティ Label 与えるために TextBox 縁の色が違います。

2) ボーダーレスを含むユーザー コントロールを作成します。 TextBox を使用して(希望の色で)境界線の長方形を描画します ControlPaint.DrawBorder[^]. 見る これ[^] このアイデアの簡単な実装例のスレッド。

解決策 1

クリックイベントまたはその他でこれを使用できます。
Textbox1.Style.Add(“Border”, “1px Solid”);

また、cssを使用することもできます

入力[type=text]:集中 {
ボーダー: 1px ソリッド
}

解決策 5

そのコードに示されているように、TextBox クラスを拡張し、BorderColor プロバティを追加し、WndProc メソッドをオーバーライドできます。
BorderStyle を FixedSingle に設定する必要があることに注意してください。

public class ExTextBox : System.Windows.Forms.TextBox
   {
       private const int WM_PAINT = 0xF;
       Color borderColor = Color.Blue;
       public Color BorderColor
       {
           get { return borderColor; }
           set { borderColor = value; Invalidate(); }
       }

       protected override void WndProc(ref Message m)
       {
           base.WndProc(ref m);
           if (m.Msg == WM_PAINT)
           {
               using (var g = Graphics.FromHwnd(Handle))
               {
                   using (var p = new Pen(BorderColor, 1))
                   {
                       g.DrawRectangle(p, new Rectangle(0, 0, this.Width - 1, this.Height - 1));
                   }
               }
           }
       }
   }

コメント

タイトルとURLをコピーしました