2010-09-17 66 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); 
    } 
}