要想让一个按钮关闭窗口,可以通过以下方式来实现:1——
在按钮的处理代码中明确调用this.Close2——
设置按钮的DialogResult为DialogResult.OK或DialogResult.Cancel等值从你的情况来看,你没有在设计的时候或初始的时候设置OK按钮的DIALOGRESULT为DIALOGRESULT.OK,所以在你第一次点击按钮的时候会关闭。之所以在你第二次点击按钮的时候会关闭,是因为你在OK按钮的执行代码中
if(this.ConditionalAttributes.Items.Count>0&&this.DecisionAttributes.Items.Count>0)
{
this.flag=true;
this.ok.DialogResult=DialogResult.OK;
}
else
{
this.flag=false;
this.ok.DialogResult=DialogResult.None;
}
有对ok按钮的dialogresult属性的明确赋值(因为你的条件是成立的),所以当你第二次点击ok按钮后会关闭。
解决:
1——
采用我在前面提到的设置按钮的dialogresult属性或在代码中明确调用窗体的关闭函数:this.Close();2——
无论你使用上面什么样的解决方案来解决这个问题,你的代码应该进行进简:删除多余的flag标志变量,同时把代码修改为以下:
ok按扭的代码
private void ok_Click(object sender, System.EventArgs e)
{
if(this.ConditionalAttributes.Items.Count>0&&this.DecisionAttributes.Items.Count>0)
{
this.DialogResult=DialogResult.OK;
}
else
{
this.DialogResult=DialogResult.None;
}
}
父窗口调用窗口SelectTable st=new SelectTable(this.server,this.database,this.uid,this.pwd);
if(st.ShowDialog(this)==DialogResult.OK)
{
//if(st.flag==true)
//这里,既然对话框的DialogResult是OK本身就是一个标志结果了。
{
this.OldTableName=st.oldtablename;
this.DecisionAttributes=st.ConditionA;
this.ConditionAttributes=st.DecisionA;
}
}