2011-10-06 77 views
0

我有一個Winform對話框,其中包含多個用戶控件 - 它們都是某種Datagridview。主要父母具有關於用戶的詳細信息,並且用戶控制每個人都有關於該人的附加細節。當我的對話框第一次加載所有的UserControls的工作,但我想弄清楚如何根據UserControl1中的位置更改來更新UserControl2。從用戶控件中選擇的傳遞值傳遞給父項

所以,我想在UserControl1中選擇一行,並根據我剛剛選擇的值在UserControl2中更新數據。

我已經嘗試在UserControl1和BindingSourcePositionChanged上使用MouseDownEvents,但我無法弄清楚如何將選定的值返回到父窗體,然後使用該值刷新其他數據網格?我看着delegates and events但我覺得睡眠不足令人難以理解。我明白我需要在UserControl1上創建我的委託和事件,然後以某種方式在我的mainform上調用它,但那是我卡住的地方,並且不知道從哪裏開始。

這是正確的方向嗎?或者還有另一種方法來完成這項工作?任何人都可以提供任何建議,如何工作?

回答

3

是的,這是什麼方法正確像下面將爲你可以用它來檢索從用戶控件的公共屬性的事件處理程序:

public class SomeClass : BaseControl 
{ 
    public event EventHandler PersonSelected; 

    public string Name{get;set;} 

    protected void FindUser() 
    { 
     var find = new Button {ID = (ToString() + "search"), Text = "Search"}; 
      find.Click += delegate(object sender, EventArgs e) 
           { 
            if (PersonSelected!= null) 
            { 
             //forward this event to the page's event handler 
             PersonSelected(this, e); 
            } 
           }; 
    } 
} 

public class SomeOtherClass : Page 
{ 
    public void Main() 
    { 

     var sp = (SomeClass)Control; 
         sp.PersonSelected += BtnClick; 
    } 

    public void BtnClick(object sender, EventArgs e) 
    { 
     //Get some value from the (SomeClass)Control here 
    } 
} 
+0

感謝那些幫助了很多。將事件提交給父窗體可以處理它,這是一條路! – windchaser