在我的form1中,我打开form2并将form2的结果写入变量DialogResult。关闭form2后,依靠form2的结果(DialogResult),我想重新显示我的表单1。
form1显示一秒钟,然后关闭。
该变量已在form1中正确读取(已通过消息框选中),但是在“ Show()”之后,该表单再次关闭。 在调用“ Close()”之前,表单不应该一直显示吗?
启动代码:
using BonnenPrinten;
using Ridder.Common.Script;
using System.Diagnostics;
using System.Windows.Forms;
public class RidderScript : CommandScript
{
public void Execute()
{
int nestingNaam = 0;
Process[] processes = Process.GetProcesses();
foreach (var item in processes)
{
string itemnaam = item.MainWindowTitle.ToString();
if (itemnaam.Contains("PN4000"))
int.TryParse(itemnaam.Substring(3, 5), out nestingNaam);
}
var form1 = new Form1(this, nestingNaam);
form1.ShowDialog();
}
}
form1中的代码:
private void BtnStarten_Click(object sender, EventArgs e)
{
if (checkbox1.Checked)
DeleteTijdelijkeBonnen();
Hide();
string sqlQuery = SetSqlQuery();
if (checkbox2.Checked)
sqlQuery = SetSqlQuery(txtboxNestingnaam.Text);
Form form2= new Form2(_script, sqlQuery, bonTekeningCombineren.Checked);
form2.ShowDialog();
if (form2.DialogResult == DialogResult.OK) //form2 is closed, form1 should be closed
{
Close();
MessageBox.Show("Bonnenverwerking succesvol afgerond!", "Gereed", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else //form2 is closed, form1 should be shown;
{
Show();
}
}
退出form2的代码:
DialogResult = DialogResult.OK;
Close();
当DialogResult = 确定时,应关闭该表单。
当DialogResult = 取消时,应打开该表单。
答案 0 :(得分:1)
问题出在Form1的DialogResult中。在打开和关闭Form2后,Form1.DialogResult也被设置为DialogResult.Cancel。
搜索后,按下buttonStarten,就设置了DialogResult。甚至都不知道这是一个选项。这已删除并解决了问题。
所以:
解决方案:删除Button.DialogResult
感谢您的帮助。
答案 1 :(得分:0)
您需要这样更改代码:
if (form2.DialogResult == DialogResult.OK)
MessageBox.Show("Bonnenverwerking succesvol afgerond!", "Gereed", MessageBoxButtons.OK, MessageBoxIcon.Information);
Show();
当else
为Show()
时,您的form2.DialogResult
阻止了DialogResult.OK
的调用。