2011-10-21 43 views
1

我有用戶控件有兩個部件UserControll和調用的TextBox事件

public System.Windows.Forms.ComboBox innerComboBox; 
public System.Windows.Forms.TextBox innerTextBox; 

,當我使用這個用戶控件我不能打電話確認事件像

myName.Validation += new System.ComponentModel.CancelEventHandler(myName_Validating); 

becouse不工作。我必須這樣稱呼它。

myName.innerTextBox.Validating += new System.ComponentModel.CancelEventHandler(myName_Validating); 

我可以重寫我的UserControll所有事件將從TextBox的innerTextBox調用?

回答

2

在你的用戶控件,嘗試添加這樣的:

public new event CancelEventHandler Validating { 
    add { innerTextBox.Validating += value; } 
    remove { innerTextBox.Validating -= value; } 
} 

那麼你myName.Validating應該像你想要的。

+0

謝謝LarsTech。將立即嘗試。 – mbrc

2

不,但是你可以用某些方式「包裝」它們,這意味着你需要將頂級用戶控件中的事件暴露給外部人員訂閱,然後訂閱內部控制甚至處理程序, 「通知」您的頂級訂戶。例如...

public class MyControl 
{ 
    public event CancelEventHandler Validating; 

    public System.Windows.Forms.TextBox innerTextBox; 

    public MyControl() 
    { 
     //post-instantiation stuff here 

     innerTextBox.Validating += myName_Validating; 
    } 

    void myName_Validating(oject sender, CancelEventArgs e) 
    { 
     if (Validating != null) 
     { 
      Validating(sender, e); 
     } 
    } 
} 

你究竟想要包裝他們取決於你;如果您希望您的控件在發佈和執行頂級訂閱之前有一些處理邏輯(可以在線程化情況下使用),那麼這將起作用,否則對於您來說更簡潔實用的方法可能就是LarsTech所建議的。

+0

謝謝先生失望。將立即嘗試。 – mbrc