2016-10-28 31 views
0

我想創建文本框的子類,以便可以添加我想要的行爲。我首先通過向項目添加項目,選擇常用控件並從工具箱拖動txtbox來設計視圖來嘗試視覺路線。但是,當我嘗試從工具箱「無法加載工具箱項目」將該新類拖到窗體時,這給了我錯誤。 所以我試圖在代碼中創建子類。我創建了新的cs文件ZControls以包含所有未來的子類控件,並在其中創建了新的txtbox類,並添加了一些代碼來改變用戶按Enter時的行爲。如何在表單中引用子類txtbox

class Ztextbox : TextBox 
{ 
     private void keypressed(Object sender, KeyPressEventArgs e) 
     { 
      if (e.KeyChar == (char)Keys.Return) 
      { 
       this.SelectNextControl((Control) sender, true, true, true, true); 
      } 
     } 
    } 

它的工作和新的Ztxtbox控件在工具箱中,我成功地將它放在窗體上。但是它沒有改變行爲,當我按Enter鍵時什麼都沒有發生。所以我想,我不能有可能是罪魁禍首代碼

TextBox tb = new TextBox(); 
this.Controls.Add(tb); 
tb.KeyPress += new KeyPressEventHandler(keypressed); 

但在這個例子中,文本框的形式類創建爲我做到了不拖,並沒有在自己的子類cs文件。 我如何得到這個工作?


好吧我得到它的工作,但不是與我的方法keypressed。我通過設計視圖完成了單擊ZtextBox並在其KeyPress事件中按Enter的過程,以便IDE爲KeyPress創建新事件,並在其中放置了我的代碼並運行。重寫KeyPressEvent的代碼被自動添加到窗體的InitializeComponent()方法中: this.txtUsername.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtUsername_KeyPress); 我試圖在上面的EventHandler中插入我的方法,但錯誤是「名稱-keypressed-在當前上下文中不存在」。 所以這不是真正的解決方案,只有解決方法。 有什麼幫助嗎?

+1

也許,你想創建你的Ztextbox? 'TextBox tb = new Ztextbox();' –

+0

這個文本框是由IDE自動創建的,作爲代碼行'this.txtUsername = new Projectname.Ztextbox(); 'code'在窗體的'code'InitializeComponent'code'中。雖然我得到關於顯示問題的消息「變量txtUsername要麼未聲明,要麼從未賦值」 –

回答

0

就第一個例子而言,您應該覆蓋TextBox類的OnKeyPress方法並調用基類實現。所以用這個替換keypressed方法。

protected override void OnKeyPress(KeyPressEventArgs e) 
{ 
    base.OnKeyPress(e); 
    if (e.KeyChar == (char)Keys.Return) 
    { 
     //Do the work... 
    } 
} 

爲了使這種控制出現在工具箱中,只需簡單地生成項目,下次你應該看到它在列表中,並能夠將其拖到窗體。如果這不起作用,請按照dknaack的回答中描述的步驟here進行操作。

相關問題