2014-01-22 76 views
0

我正在研究一個Grasshopper組件,它是一個Rhino 3D插件,它可以執行圖形編程。我有一個代碼片段從WinForms的,就像這樣:Winform的確定按鈕永遠不會被調用

public void ShowForm() 
    { 
     hmf.ShowDialog(); 

     if (hmf.ShowDialog() == DialogResult.OK) { 

      MessageBox.Show("DialogResultOK was hit."); 
      // store winforms values into global vars 

      try 
      { 
       MessageBox.Show(Params.Input[0].ToString()); 
       Grasshopper.Kernel.Parameters.Param_String param = (Grasshopper.Kernel.Parameters.Param_String)Params.Input[0]; 
       param.PersistentData.Clear(); 
       for (int i = 0; i <= x.Count - 1; i++) 
       { 
        param.PersistentData.Append(new GH_String(x[i])); 
       } 
       param.ExpireSolution(true); 
      } 
      catch (Exception ex) 
      { 
       // error message 
      } 
     } 
     else if (hmf.ShowDialog() == DialogResult.Cancel) 
     { 
      MessageBox.Show("DialogResultCancel was hit."); 
      this.ExpireSolution(false); 
     } 
    } 

它提供了兩個條件,一個DialogResult.OKDialogResult.Cancel。從理論上講,當調用OK時,它會將winforms值保存到我的全局變量中,否則將會變爲DialogResult.Cancel

由於某種原因,當我使用MessageBox.Show("...")時,它顯示OK從不被調用。

這裏是forms代碼:

private void button1_Click(object sender, EventArgs e) // ok 
    { 
    } 

    public Button button1Object{ get { return this.button1; } } 

    private void button2_Click(object sender, EventArgs e) // cancel 
    { 

    } 

    public Button button2Object { get { return this.button2; } } 

這是我form的樣子。

enter image description here

回答

4

要調用ShowDialog的()函數的三倍!調用一次,並將其結果放入一個變量中。每次你打電話時,都會有不同的迴應。你的方法使你的「if」語句有無法訪問的代碼塊。

public void ShowForm() 
{ 
    var a = hmf.ShowDialog(); 

    if (a == DialogResult.OK) { 

     MessageBox.Show("DialogResultOK was hit."); 
     // store winforms values into global vars 

     try 
     { 
      MessageBox.Show(Params.Input[0].ToString()); 
      Grasshopper.Kernel.Parameters.Param_String param = (Grasshopper.Kernel.Parameters.Param_String)Params.Input[0]; 
      param.PersistentData.Clear(); 
      for (int i = 0; i <= x.Count - 1; i++) 
      { 
       param.PersistentData.Append(new GH_String(x[i])); 
      } 
      param.ExpireSolution(true); 
     } 
     catch (Exception ex) 
     { 
      // error message 
     } 
    } 
    else if (a == DialogResult.Cancel) 
    { 
     MessageBox.Show("DialogResultCancel was hit."); 
     this.ExpireSolution(false); 
    } 
} 
+0

哇。我還注意到,編譯完成後,需要三次關閉對話框。你說得對,因爲它被稱爲三次。讓我解決這個問題並回復你。 – theGreenCabbage

+0

嘿codenoire。它似乎解決了我之前的問題,但是,單擊確定仍然不保存我的結果。例如,單擊確定不會執行任何操作。點擊紅色的關閉按鈕會提示我點擊'DialogResultCancel被擊中',但如果我再次打開對話框,結果將被保存oO – theGreenCabbage

+0

好了,現在已經修復了,檢查hmf表單上的按鈕的屬性並確保它返回DialogResult.OK(另一張海報放了這個,但似乎已經刪除了它) –

相關問題