C#CancelButton关闭对话框?
-
21-09-2019 - |
题
(VS2005,.NET 2.0)
我有被显示为使用的ShowDialog()方法的对话框的形式。窗体的CancelButton属性设置为窗体上的按钮。即使我该按钮的的DialogResult设置为无,点击按钮仍然关闭对话框。我不希望这种事情发生 - 我希望能够控制对话框是否关闭与否
此问题不会与形式的的AcceptButton发生 - 与该按钮的的DialogResult设置为none,我可以做什么样的处理是必要的,然后再决定是否要手动设置窗体的DialogResult的以使其关闭
我以为CancelButton属性本来是索利表明,应该是“点击”按钮,如果按下Escape(多为的AcceptButton情况应该只是一个指示按钮“点击”被按下时输入)。我错在这?我错过了一些其他的原因,我的形式结束?或者,这是一个错误?
编辑:代码添加。这是对话形式(形式2)取消按钮(按钮1)。 取消按钮仅是窗体的CancelButton,它不具有的DialogResult设置为取消,但按下按钮仍然关闭窗体
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Name = "button1";
this.button1.Text = "button1";
//
// Form2
//
this.CancelButton = this.button1;
this.Controls.Add( this.button1 );
this.Name = "Form2";
this.Text = "Form2";
this.ResumeLayout( false );
}
解决方案
另外注意的是,形式可以是封闭的按下Alt + F4并按下X按钮和两种方式都不会触发取消按钮点击事件。
除非你也处理这些情况不会是最好遵循slurdge的意见和防止形式从事件的FormClosing关闭。
修改强> 另外请注意,如果你改变了按钮的DialogResult回无在属性窗口,你将其改为默认值。如果该值的属性,那么它不会在*了.Designer.cs是持久的默认值。即使它是持续的形式初始化代码被置于最后在*了.Designer.cs和将覆盖无与由于线路的取消:
this.CancelButton = this.button1;
可以在反射器检查前一行执行此:
public void set_CancelButton(IButtonControl value)
{
base.Properties.SetObject(PropCancelButton, value);
if ((value != null) && (value.DialogResult == DialogResult.None))
{
value.DialogResult = DialogResult.Cancel;
}
}
可以在InitializeComponent()调用之后的构造改回为无。
其他提示
看来你要执行表单关闭验证。结果 该事件的FormClosing是这一个完美的结合。这将使你有相同的代码来控制关闭或没有。结果 只需设置取消属性为true来防止关闭。 请参阅的FormClosing 。
有默认行为。
从MSDN:
此属性允许您指定当用户按下应用程序中的ESC键进行默认操作。您可以使用此属性,允许用户通过允许他们只需按ESC键关闭窗口而不提交更改,而不是手动点击用鼠标取消按钮快速浏览一个简单的形式。
而不是试图在button_click事件来处理这种情况,在form_closing事件处理它。
MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (DialogResult == DialogResult.Cancel)
{
// do my processing ...
if (false)
e.Cancel = true; // stop the form from closing
}
}
我在这里处理我接受按钮的代码还,我假设任何事情!= DialogResult.OK被取消,但你可以做什么是舒适的适合你。