[英]How to format all textbox values on LostFocus event in Winform
[英]Binding an event to all TextBox 'es in a winform
我的單個winform應用程序中有很多TextBoxes。 我正在尋找一種在表單加載時或在其構造函數中將單個事件方法綁定到所有這些文本框的方法,因此,我不將事件添加到設計器中的每個單個文本框。
在這種情況下,我想檢測ENTER鍵,然后以編程方式單擊一個按鈕:
private void ApplyFilterOnEnterKey(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnApplyFilters_Click(this, null);
}
}
現在的問題是,如何遍歷表單中的所有文本框並將其綁定到上述方法? 我的文本框無處不在,位於嵌套的tablelayoutpanels或嵌套的普通面板中。 這個循環看起來如何,應該放在哪里? 在表單構造函數中還是在加載事件中?
只需使用Controls集合並查看控件是否為文本框,然后附加事件
遍歷所有文本框(包括嵌套框),如下所示: 遍歷文本框
然后,
var allTextBoxes = this.GetChildControls<TextBox>();
foreach (TextBox tb in this.GetChildControls<TextBox>())
{
tb.Click += ApplyFilterOnEnterKey;
}
除了訂閱每個TextBox的KeyDown事件,您還可以使用其他兩個選項,我認為它們更好:
通過將Enter鍵將表單的AcceptButton
屬性設置為要單擊的按鈕,將按鈕設置為表單的默認按鈕。
覆蓋表單上的ProcessDialogKey並檢查是否按Enter鍵:
protected override bool ProcessDialogKey(Keys keyData) { if (keyData == Keys.Enter) { // ... do what you want return true; } else return base.ProcessDialogKey(keyData); }
private void TextBoxFocusIn(object sender, EventArgs e)
{
TextBox textBox = (TextBox)sender;
if (textBox.Text == "Encrypted value here...")
{
textBox.Text = "";
textBox.ForeColor = Color.Black;
}
}
private void TextBoxFocusOut(object sender, EventArgs e)
{
TextBox textBox = (TextBox)sender;
if (textBox.Text =="")
{
textBox.Text = "Encrypted value here...";
textBox.ForeColor = Color.Gray;
}
}
private void BindPlaceHolderInTextbox(Panel contentPanel)
{
foreach(Control control in contentPanel.Controls)
{
if(control.GetType() == typeof(TextBox))
{
control.Text = "Encrypted value here...";
control.ForeColor = Color.Gray;
control.GotFocus += new System.EventHandler(TextBoxFocusIn);
control.LostFocus += new System.EventHandler(TextBoxFocusOut);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.