2010-09-17 64 views
0

我必须赶上从使用的方法从一个静态类来更新阵列的父对话框的事件。呼叫对话框方法形成一个静态类在C#

从该对话框我叫一个孩子对话框,在列表中显示的阵列。

我知道一个变量,如果当前对话框是子对话框或父对话框,但从静态类中的方法我怎么能调用子对话框内的方法来更新列表,当我赶上事件?

+0

我们展示的代码? – 2010-09-17 12:55:59

回答

1

您可以在对话框的实例传递到静态方法如下图所示。但是,如果您将静态方法调用到对话框的方法中,我肯定会重新访问您的体系结构。

public static class MyStaticClass 
{ 
    public static void SomeMethod(Form myDialog) 
    { 
     myDialog.SomeMethodOnTheDialog(); 
    } 
} 
+0

我会尝试在调用方法内部的每个对话框中设置一个catch事件,以便调用类中的方法,所以当它从类方法返回时,我可以在对话框中使用本地方法而没有任何问题。但在打开子对话框之前,是否可以重置父对话框的catch?我必须将其设置为空吗? – Leen15 2010-09-17 13:12:43

0

你必须修改您的静态方法采取对话的实例作为一个参数:

public static void UpdateArray(Dialog instance) 
{ 
    // Initialize what you need 

    instance.DoSomething(); 
} 

那么你将所有在你的事件处理程序,如:

public void Dialog_EventHandler(object sender, EventArgs e) 
{ 
    Dialog dialog = (Dialog) sender; 
    UpdateArray(dialog); 
} 
+0

是的,但我认为,如果我在父母和孩子对话框中设置catch,我没有正确的对话框实例在UpdateArray中。所以这个catch是我设置的第一个,还是随机选择的?我在netcf 3.5中开发,父对话框打开但隐藏,只显示子对话框。 – Leen15 2010-09-17 13:19:18

0

在儿童对话框的类内部,您必须创建公共方法来执行您需要的操作。

然后,你只需要调用从静态类那些公共方法。

这是一个小例子,我从一个静态类称为公共方法(在我的主要形式)。我认为这与你所做的相似。


主要表单代码

public static void WriteToTextBox(string message) 
{ 
    TextBox myLog = (TextBox)CITX12Parser.Main.ActiveForm.Controls.Find("txtLog", true).First(); 
    myLog.Text = message; 
} 

静态类片断

public class LoggingUtils 
{ 
    public static void TestLog(string msg) 
    { 
     Main.WriteToTextBox(msg + Environment.NewLine); 
    } 
}