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.OK
和DialogResult.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
的样子。
哇。我还注意到,编译完成后,需要三次关闭对话框。你说得对,因为它被称为三次。让我解决这个问题并回复你。 – theGreenCabbage
嘿codenoire。它似乎解决了我之前的问题,但是,单击确定仍然不保存我的结果。例如,单击确定不会执行任何操作。点击红色的关闭按钮会提示我点击'DialogResultCancel被击中',但如果我再次打开对话框,结果将被保存oO – theGreenCabbage
好了,现在已经修复了,检查hmf表单上的按钮的属性并确保它返回DialogResult.OK(另一张海报放了这个,但似乎已经删除了它) –