我正在學習如何通過從C#中的父類繼承來實現自定義控件。當用戶將信息輸入到文本框中時,什麼方法設置文本框的文本?
我需要重寫用戶輸入文本時觸發的例程。很明顯,我可以添加一個事件來觸發使用TextChanged
,但這對我來說似乎是骯髒的清理方法。
我已經考慮覆蓋Text {get;set;}
屬性,但這不起作用。
幫助?
我正在學習如何通過從C#中的父類繼承來實現自定義控件。當用戶將信息輸入到文本框中時,什麼方法設置文本框的文本?
我需要重寫用戶輸入文本時觸發的例程。很明顯,我可以添加一個事件來觸發使用TextChanged
,但這對我來說似乎是骯髒的清理方法。
我已經考慮覆蓋Text {get;set;}
屬性,但這不起作用。
幫助?
要考慮的一種方法是創建一個擴展標準TextBox
的自定義文本框。你可以在override
的許多屬性和方法,包括OnKeyPress
來處理用戶輸入。
簡單的例子:當用戶進入一個感嘆號
class MyTextBox : TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e) {
if (e.KeyChar == '!') {
e.Handled = true;
}
base.OnKeyPress(e);
}
}
在這個例子中的TextBox
將忽略輸入。您可以像使用標準Winform TextBox
控件一樣使用此TextBox。
您可以使用Visual Studio的智能感知來查看可用的override
。只要輸入'override'開始在類中創建一個新成員,並且所有可覆蓋的成員都會出現。
編輯 查看this article在codeproject.com上的例子。文章中介紹的控件擴展了TextBox來專門過濾非數字字符,但是您可以輕鬆修改它以篩選出需要過濾的字符。
使用自定義控件的另一個說法是:您可以跨項目重複使用它,而無需每次都重新編碼。
這是我從VB6高中時代開始的常用方法(如果keyascii不需要,請將keyascii設置爲0)。 e.Handled對我來說是新的。然而,這在用戶複製和粘貼時不起作用,並且'OnTextChanged(EventArgs e)'事件參數沒有'.Handled'屬性 – James
@James我確實說過我的是一個簡單的例子。我在codeproject.com上發現了一篇文章,它使用了擴展TextBox的相同技術來完成你需要做的事情,包括處理C&P。 –
什麼不重寫覆蓋文本屬性,你想要做什麼? – mydogisbox
看來Text屬性只在嘗試通過代碼訪問文本框中的內容時使用(並且在運行時並未由最終用戶觸發) – James