2015-11-18 75 views
0

我正在嘗試自定義消息框。我正在調用一個帶有私有構造函數和靜態「顯示」方法的簡單表單。它會有一個確定的動態創建取消按鈕,取決於用戶通過什麼。我創建按鈕時創建Click事件處理程序。 我想知道的是如何將DialogResult傳回給調用者。 這裏是創建按鈕(顯示)和事件處理程序的代碼。返回對話框自定義消息框中的結果

public static DialogResult Show(string title, string message, ButtonStyle buttonStyle) { 
    AFGMessageBox box = new AFGMessageBox(); 
    box.Text = title; 
    box.LblMessage.Text = message; 
    if (buttonStyle == ButtonStyle.Ok) { 
     Button okButton = new Button { 
      Width = 93, 
      Height = 40, 
      Location = new Point(x: 248, y: 202), 
      Text = "OK" 
     }; 
     okButton.Click += new EventHandler(OkButtonEventHandler); 
    } 
    return _result; 
} 

private static void OkButtonEventHandler(object sender, EventArgs e) { 
    _result = DialogResult.OK; 
} 

回答

0

如下更改方法AFGMessageBox.Show

public static DialogResult Show(string title, string message, ButtonStyle buttonStyle) { 
    AFGMessageBox box = new AFGMessageBox(); 
    box.Text = title; 
    box.LblMessage.Text = message; 
    if(buttonStyle == ButtonStyle.Ok) { 
     Button okButton = new Button { 
      Width = 93, 
      Height = 40, 
      Location = new Point(x: 248, y: 202), 
      Text = "OK" 
     }; 
     box.Controls.Add(okButton); // add the button to your dialog! 
     okButton.Click += (s, e) => { // add click event handler as a closure 
      box.DialogResult = DialogResult.OK; // set the predefined result variable 
      box.Close(); // close the dialog 
     }; 
    } 
    return box.ShowDialog(); // display the dialog! (it returns box.DialogResult by default) 
} 
2

你甚至都不需要處理單擊事件。您只需要設置您創建的文檔中

備註

表示如果該物業的的DialogResult被設置爲其他任何按鈕的Button.DialogResult Property,和如果父窗體通過ShowDialog方法顯示,則單擊該按鈕將關閉父窗體,而無需連接任何事件。然後將窗體的DialogResult屬性設置爲點擊按鈕時該按鈕的DialogResult。 例如,創建一個「是/否/取消」對話框,只需添加三個按鈕並設置其的DialogResult屬性沒有,並取消

我認爲這是自我解釋,但以防萬一,這裏是你的示例代碼修改後的版本

public static DialogResult Show(string title, string message, ButtonStyle buttonStyle) { 
    AFGMessageBox box = new AFGMessageBox(); 
    box.Text = title; 
    box.LblMessage.Text = message; 
    if (buttonStyle == ButtonStyle.Ok) { 
     Button okButton = new Button { 
      Width = 93, 
      Height = 40, 
      Location = new Point(x: 248, y: 202), 
      Text = "OK", 
      DialogResult = DialogResult.OK 
     }; 
     box.Controls.Add(okButton); 
    } 
    return box.ShowDialog(); 
}