簡體   English   中英

在WinForms C#2010中將文本框作為參數傳遞時如何在不使用文本框名稱的情況下使用文本框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM