2013-04-12 74 views
0

我想創建使用C#窗體窗體應用程序的GUI。我在mainfrom中寫了一個方法。我在其中一個用戶控件中有兩個複選框。當複選框發生變化時,我需要在主窗體中引發該事件並運行我在mainfrom中編寫的方法。我怎樣才能做到這一點 ?。如何在主窗體中使用usercontrol複選框事件。

+0

哪裏是你的代碼,以顯示你試過嗎? –

+0

看看[我對類似問題的回答](http://stackoverflow.com/questions/15605161/how-to-make-form1-label-text-change-when-checkbox-on-form2-is-檢查/ 15605436#15605436)。 –

回答

0

在幫助中查找代表。您可以在控制檯中的主框中創建一個過程,將委託設置爲主過程中的過程,並調用複選框.checked。

一個警告的工作 - 把一個檢查委託不是空的(這意味着它沒有設置),否則你會得到一個錯誤。

0
public class MainForm : Form 
{ 
    public void YourMethod() 
    { 
     /// 
    } 
} 

public class UserControl 
{ 
    private readonly MainForm _MainForm; 

    public UserControl(MainForm mainForm) 
    { 
     _MainForm = mainForm; 

     ///add event for checkbox 
    } 

    private void Checkbox_Clicked(object Sender, EventArgs e) 
    { 
     _MainForm.YourMethod(); 
    } 

} 
0

在用戶控件執行以下操作(例如,從我自己的自定義控制我做,它調整到你所需要的顯然:)):

public event EventHandler InnerDiagramCheckBox1CheckChanged; 

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    if (InnerDiagramCheckBox1CheckChanged != null) 
    { 
     InnerDiagramCheckBox1CheckChanged(sender, e); 
    } 
} 

然後你就可以在主做什麼形成其負載或構造是:

instanceofyourcontrol.InnerDiagramCheckBox1CheckChanged+= new 
System.EventHandler(nameofthefunctionyouwanttotriggerinthemainform); 

您做些什麼這裏委派事件您的用戶控制:)

+0

我已經試過你的方法,但我在mainfrom加載錯誤,當我使用上面的代碼,如「usercontrol.InnerDiagramCheckBox1CheckChanged」是一個字段,但使用像一個類型。 – reddy

0

在用戶控件中創建一個委託並使其指向主窗體中的功能。爲usercontrol中的複選框創建OnCheckedChanged()事件,並在事件中調用委託方法。

看看這個例子

mainform.cs

mainform_load() 
{ 
// Initialize user control delegate object to point the method in mainform 
usercontrol1.method= Method1; 
... 
} 

// method to call from usercontrol 
public void Method1() 
{ 

} 

usercontrol1.cs

delegate void Method1() 
public PointMyMethod method; 

... 

checkbox1_OnCheckedChanged() 
{ 
    // This calls the method in mainform 
    method(); 
} 

... 

希望它可以幫助

相關問題