[ad_1]
こんにちは、みんな、
Textbox Click 時に Textbox Border Color を変更する必要があります。
体がこれを行う方法を知っている場合は、私に知らせてください。
form_load イベントで試してみましたが、フォーム内のすべてのテキスト ボックスに適用されます。
特定の Textbox クリックでそれが必要です。
よろしく、
パワン。
解決策 3
内なる出来事に働きかけるために TextBox
、あなたから直接 UserControl
、必要なイベントを公開できます。 このアイデアの実装例を次に示します。
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 デザイナからでもこのイベントを使用できるようになりました。 公開されたイベントのイベント ハンドラーの例を次に示します。
private void textBoxEx1_TextBoxClick(object sender, EventArgs e) { // Change the border color on click textBoxEx1.BorderColor = Color.Red; }
別の方法は、全体を公開することです TextBox
ユーザーコントロールのパブリックプロパティとして、必要に応じてそのイベントにサブスクライブします。
例:
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)); } } } } }
[ad_2]
コメント