我的主表单上有一个ToolStripButton,并附加了一个点击事件,点击它会打开一个对话框,并将toolStripButton的Checked状态设置为' true'。 在从上面的点击打开的表单的FormClosing事件中,尝试将相同的toolStripButton的Checked状态设置为' false'。 但是,国家仍然是真实的'总是
toolStripButton1_Click(object sender, EventArgs e)
{
if (!toolStripButton1.Checked)
{
toolStripButton1.Checked = true;
RevisionTools revTools = new RevisionTools();
revTools.ShowDialog();
}
}
创建如下属性:
public bool revEditState
{
get{return this.toolStripButton1.Checked;}
set{this.toolStripButton1.Checked = value;}
}
点击时打开的对话框:
public partial class RevisionTools : Form
{
public RevisionTools()
{
InitializeComponent();
}
private void RevisionTools_FormClosing(object sender, FormClosingEventArgs e)
{
MainForm mainForm = new MainForm();
mainForm.revEditState = false;
}
}
这是设置属性值的正确方法吗?它是一个WinForms应用程序。
答案 0 :(得分:3)
您正在MainForm的新实例上进行设置。您需要在打开对话框时传递MainForm的实例,或者您可以在ShowDialog之后在MainForm本身中执行此操作。
在您的示例中,在ShowDialog上执行此操作将是一种更好的方法。
RevisionTools revTools = new RevisionTools();
revTools.ShowDialog();
this.revEditState = false;
注意:您还可以将Dialog的结果作为DialogResult捕获,以有条件地设置此值。即如果用户在对话框上单击“确定”或“取消”。
答案 1 :(得分:0)
它保持正确,因为在您的FormClosing事件中,您在mainForm上的全新实例中将revEditState设置为false。您可以将变量传递给辅助表单作为参考,也可以在主表单中指定FormClosing事件,如下所示;
revTools.FormClosing += new FormClosingEventHandler(RevisionTools_FormClosing);
您需要移动" RevisionTools_FormClosing"到你的主要形式。