2016-11-26 94 views
1

我想要繼承的TextBox 並重寫onKeyDown事件,使標籤功能,當按下鍵輸入自定義文本框類繼承。如何創建類,從文本框

有這個問題的重複,但沒有我發現有意義的答案,所以我想開一個新的討論。

我不想從用戶控件,但是從文本框繼承...這是真的很難嗎?我似乎無法找到如何做到這一點的直接教程或示例。

事情是這樣的:

public partial class CustomTextBox : TextBox 
{ 
    public CustomTextBox() 
    { 
     this.KeyDown += customKeyDown; 
    } 

    void customKeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      SendKeys.Send("{TAB}"); 
     } 
    } 
} 

請記住,我很少有經驗與用戶控件或CustomControls工作,這是很久以前的事,所以我忘了關鍵的東西

+2

查看覆蓋關鍵字,我想你會有你需要的東西 –

+0

另外:不要稱之爲UserControl(這是一個容器類型)。它將是一個自定義控件,即控件的子類 – TaW

+0

@SeanK在單行的「TextBox」中,即使沒有重寫,它也可以工作。但對於多行「TextBox」,即使重寫也不起作用。 –

回答

3

你只覆蓋OnKeyDown事件處理程序,這裏不需要UserControl

下面移動到下一個控制級ENTER當鍵被按下時在單行或多行的文本框。當多行時,按下SHIFT + ENTER即可插入ENTER。

作爲額外的獎勵,惱人的「叮」聲被抑制(如果您不需要處理控制範圍之外的關鍵效果很好最簡單的方式)。

namespace YourNameSpace 
{ 
    public class CustomTextBox : TextBox 
    { 
     protected override void OnKeyDown(KeyEventArgs e) 
     { 
      base.OnKeyDown(e); 

      if (e.KeyCode == Keys.Enter && (!Multiline || Multiline && !e.Shift)) 
      { 
       SendKeys.Send("{TAB}"); 
       // Removes "ding" sound by NOT passing the key down to container 
       e.SuppressKeyPress = true; 
      } 
     } 
    } 
}