Я работаю над компонентом Grasshopper, который представляет собой плагин Rhino 3D, который выполняет графическое программирование. У меня есть фрагмент кода WinForms, например, так:Winform OK кнопка никогда не называется
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
выглядит.
Wow. Я также заметил, что потребовалось три раза, чтобы закрыть мой диалог, как только я его скомпилировал. Вы правы в том, что его называли три раза. Позвольте мне исправить это и вернуться к вам. – theGreenCabbage
Эй код. Кажется, что исправил мою предыдущую проблему, однако нажатие «ОК» по-прежнему не сохраняет мои результаты. Например, нажатие кнопки «ОК» ничего не делает. Щелчок по красной кнопке закрывает подсказку, чтобы я нажал кнопку «DialogResultCancel», но если я снова открою диалоговое окно, результаты будут сохранены. OO – theGreenCabbage
Итак, теперь, когда это исправлено, проверьте свойства кнопки на форме hmf и убедитесь, что она возвращается DialogResult.OK (другой плакат помещает это, но, кажется, удалил его) –