[英]How to use Textbox without using textbox name when I pass the textbox as parameter in WinForms C# 2010
我有一個以TextBox為參數的函數。 我在“文本框”更改事件下使用此功能。
private void ZeroDigit(TextBox txt)
{
string Prefix = "";
for (int i = 0; i < txt.MaxLength; i++)
Prefix += "0";
txt.Text = (txt.Text.Trim() == "" ? "" : string.Format("{0:" + Prefix.Trim() + "}", System.Convert.ToInt32(txt.Text.Trim())));
}
private void txtCCID_TextChanged(object sender, System.EventArgs e)
{
ZeroDigit(txtCCID);
}
問題是,使用此功能時,我必須每次編寫每個文本框名稱時都要寫一次。 在這里我寫了ZeroDigit(txtCCID),如果我想使用10個TextBox,我必須寫10倍10個不同的TextBox名稱。
有沒有辦法在不編寫文本框名稱的情況下使用該名稱?
創建一個處理程序並將所有文本框綁定到該處理程序。 然后將發送方對象傳遞給您的函數。
private void textbox_TextChanged(object sender, System.EventArgs e)
{
ZeroDigit(sender as TextBox);
}
是的,你有
private void TextBox_TextChanged(object sender, System.EventArgs e)
{
ZeroDigit(sender as TextBox);
}
現在將此事件附加到所有TextBox
txtCCID.TextChanged +=TextBox_TextChanged;
或者您可以從加載中使用它
foreach(Control Ctl in this.Controls)
{
if(Ctl is TextBox)
(Ctl as TextBox).TextChanged +=TextBox_TextChanged;
}
為每個TextBox的TextChanged事件分配相同的事件處理程序。 像這樣:
txtCCID.TextChanged += txtCCID_TextChanged;
txtAnotherTextBox.TextChanged += txtCCID_TextChanged;
等等...
然后使用sender
參數確定哪個文本框引發了此事件。
是的,像其他人一樣為您創建統一的處理程序。 如果您在不使用圖形設計器的情況下通過代碼創建gui,則可以考慮創建自己的類MyHandledTextBox
,該類派生自TextBox
類,並且唯一的更改是在構造函數中,每個MyHandleTextBox
實例都會自動分配給處理程序。 如果您將廣泛使用此處理程序,也許會在更多視圖中使用,這可以節省一些時間和大量樣板代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.