2014-01-22 47 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(另一张海报放了这个,但似乎已经删除了它) –

相关问题