dialogresult属性,eldialog属性

http://www.itjxue.com  2023-01-24 13:48  来源:未知  点击次数: 

c# Form的Show和ShowDialog的区别

在C#中窗口的显示有两种方式:模态显示(showdialog)和非模态显示(show)。

二者最常见的区别是:

模态显示后,

弹出窗口阻止调用窗口的所有消息响应。

只有在弹出窗口结束后调用窗口才能继续。

在模态窗口“关闭”后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值。

非模态显示后,

可以在弹出窗口和调用窗口之间随意切换。

调用窗口调用show方法后,下面的代码可以立即执行。

在非模态窗口关闭后,窗口的所有资源被释放,窗口不存在,无法获取窗口的任何信息。

当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置 DialogResult 属性的值时,.NET Framework 不调用 Close 方法。窗体转而可以隐藏并可重新显示,而不用创建该对话框的新实例。因为未关闭显示为对话框的窗体,所以在您的应用程序不再需要该窗体时,必须调用该窗体的 Dispose 方法。

也就是说,非模态窗口在关闭时,会调用close方法,进而调用dispose方法,将窗口资源进行回收,所以窗口关闭后,不能在获取窗口信息。

模态窗口在关闭时,不会调用close方法,也不调用dispose方法,窗口仍然存在,占有资源,所以可以继续获得窗口相关信息,在窗口不再使用时,需要手动释放资源。

Form2 testDialog = new Form2();

if (testDialog.ShowDialog(this) == DialogResult.OK)

{

this.txtResult.Text = testDialog.TextBox1.Text; // 窗口关闭后,还可以继续访问窗口的子控件值

}

else

{

this.txtResult.Text = "Cancelled";

}

// 关闭窗口

// 其他操作

......

......

testDialog.ShowDialog(); // 模态窗口关闭后,可以再次显示出来

testDialog.Dispose(); // 当模态窗口不再使用时,应该调用dispose方法释放资源

Form2 test = new Form2();

test.Show(); // 非模态显示

// 关闭窗口

// 其他操作

......

......

test.Show(); // 异常,因为在test关闭时,窗口已经被彻底销毁了,这里必须重新新建一个窗口,然后显示

// 修改为如下

test = new Form2(); // 创建一个新窗口,重新分配空间

test.Show(); // 显示窗口

表单是怎么样使用属性DialogResult

获取或设置一个值,该值在单击按钮时返回到父窗体。

[Visual Basic]

Public Overridable Property DialogResult As DialogResult _

Implements IButtonControl.DialogResult

[C#]

public virtual DialogResult DialogResult {get; set;}

[C++]

public: __property virtual DialogResult get_DialogResult();

public: __property virtual void set_DialogResult(DialogResult);

[JScript]

public function get DialogResult() : DialogResult;

public function set DialogResult(DialogResult);

在VB.net中的DialogResult.OK代表什么呢?

这是一个枚举

表示的是用户按下的是弹出对话框里的OK

这个枚举里还有其他一些表示选择结果的枚举值如:DialogResult.Cancel 等

一般都是这么用的

if SFD.ShowDialog = DialogResult.OK then

'点OK后你要执行的代码

else

'点取消你要执行的代码

end if

关闭窗口事件

Closing 是Form类的事件,你先检查一下。

在窗体关闭时,Closing 事件发生。在窗体关闭后,将释放在该对象内创建的所有资源并释放该窗体。如果取消此事件,则该窗体保持打开状态。若要取消窗体的关闭操作,请将传递给事件处理程序的 CancelEventArgs 的 Cancel 属性设置为 true。

当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。通过在窗体的 Closing 事件的事件处理程序中设置 DialogResult 属性,可以重写用户单击“关闭”按钮时分配给 DialogResult 属性的值。

警告:

当调用 Application.Exit 方法以退出应用程序时,不引发 Form.Closed 和 Form.Closing 事件。如果在必须执行的其中一个事件中有验证代码,则在调用 Exit 方法之前,应分别为每个打开的窗体调用 Form.Close 方法。

如果窗体是 MDI 父窗体,则在引发 MDI 父窗体的 Closing 事件之前将引发所有 MDI 子窗体的 Closing 事件。另外,在引发 MDI 父窗体的 Closed 事件之前,将引发所有 MDI 子窗体的 Closed 事件。取消 MDI 子窗体的 Closing 事件不能防止引发 MDI 父窗体的 Closing 事件。但是,取消该事件会将作为参数传递给父窗体的 CancelEventArgs 的 Cancel 属性设置成 false。要强制关闭所有 MDI 父窗体和子窗体,请将 MDI 父窗体中的 Cancel 属性设置成 false。

注意:

在显示为无模式窗口的 Form 上调用 Close 方法时,不能调用 Show 方法使窗体可见,因为窗体的资源已被释放。若要隐藏窗体然后又使其可见,请使用 Control.Hide 方法。

C#窗体还原事件

窗体的关闭事件

对于关注对 Windows 窗体应用程序中引发的每个事件按次序进行处理的开发人员来说,事件引发的顺序特别重要。

当 Windows 窗体应用程序启动时,主窗体的启动事件按以下顺序引发

1、System.Windows.Forms.Control.HandleCreated

在为控件创建句柄时发生

2、System.Windows.Forms.Control.BindingContextChanged

当 BindingContext 属性的值更改时发生

注:每个 Windows 窗体至少有一个 BindingContext 对象,详见MSDN

3、System.Windows.Forms.Form.Load

在第一次显示窗体前发生

4、System.Windows.Forms.Control.VisibleChanged

在 Visible 属性值更改时发生

注:如果通过编程修改或用户交互更改 Visible 属性,则将引发此事件

5、System.Windows.Forms.Form.Activated

当使用代码激活或用户激活窗体时发生

6、System.Windows.Forms.Form.Shown

只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。

当应用程序关闭时,主窗体的关闭事件按以下顺序引发:

1、System.Windows.Forms.Form.Closing

在关闭窗体时发生

注意:在 .NET Framework 版本 2.0 中,Closing 事件已过时,应改用 FormClosing 事件。

2、System.Windows.Forms.Form.FormClosing

在关闭窗体前发生,此时可以取消窗体的关闭。

3、System.Windows.Forms.Form.Closed

关闭窗体后发生

注意:在 .NET Framework 版本 2.0 中,Closed 事件已过时,应改用 FormClosed 事件。

4、System.Windows.Forms.Form.FormClosed

关闭窗体后发生

5、System.Windows.Forms.Form.Deactivate

当窗体失去焦点并不再是活动窗体时发生

注意:当调用 Application.Exit 方法以退出应用程序时,不引发 Form.Closed 和 Form.Closing 事件,但是会激发 Form.FormClosed 和 Form.FormClosing 事件。

FormClosing :

在窗体关闭时,FormClosing 事件发生。窗体关闭时,此事件会得到处理,从而释放与此窗体关联的所有资源。如果取消此事件,则该窗体保持打开状态。若要取消窗体的关闭操作,请将传递给事件处理程序的 FormClosingEventArgs 的 Cancel 属性设置为 true。

FormClosed:

在用户或 Application 类的 Close 方法或 Exit 方法关闭窗体后,会发生 FormClosed 事件。

若要防止窗体关闭,请处理 FormClosing 事件,并将传递给事件处理程序的 CancelEventArgs 的 Cancel 属性设置为 true。可以使用此事件执行一些任务,如释放窗体使用的资源,还可使用此事件保存输入窗体中的信息或更新其父窗体。 当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。通过在窗体的 FormClosing 事件的事件处理程序中设置 DialogResult 属性,可以在用户单击“关闭”按钮时重写分配给 DialogResult 属性的值。

如果窗体是多文档界面 (MDI) 父窗体,则在引发 MDI 父窗体的 FormClosing 事件之前将引发所有 MDI 子窗体的 FormClosing 事件。同样,在引发 MDI 父窗体的 FormClosed 事件之前,将引发所有 MDI 子窗体的 FormClosed 事件。取消 MDI 子窗体的 FormClosing 事件不能防止引发 MDI 父窗体的 FormClosing 事件。但是,取消该事件会将作为参数传递给父窗体的 FormClosingEventArgs 类的 Cancel 属性设置成 false。要强制关闭所有 MDI 父窗体和子窗体,请将 MDI 父窗体中的 Cancel 属性设置成 false。

窗体显示为无模式对话框时,在close之后,此窗体的资源已释放,不能再调用show方法使窗体可见。

窗体显示为有模式对话框时,单击 关闭 按钮 (" X " 的按钮在窗体的右上角) 会隐藏窗体并且DialogResult 属性将设置为 DialogResult.Cancel。 当用户单击该对话框的关闭的窗体按钮或设置 DialogResult 属性的值时, .NET framework不调用Close 方法,该窗体会隐藏并可重新显示,而不必创建对话框的新实例。 由于作为对话框中显示的窗体隐藏而未关闭,当窗体由应用程序时不再需要,必须调用该窗体的 Dispose 方法。

在以下两种情况下调用 Close 不会释放窗体:(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;(2)该窗体是模式对话框。 在这些情况下,需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。

/// summary

/// 最小化到托盘程序

/// /summary

/// param name="sender"/param

/// param name="e"/param

private void notifyIcon1_Click(object sender, EventArgs e)

{

if (this.WindowState == FormWindowState.Normal)

{

this.WindowState = FormWindowState.Minimized; HiddenForm();

}

else if (this.WindowState == FormWindowState.Minimized)

{

ShowForm();

}

}

private void FrmMain_SizeChanged(object sender, EventArgs e)

{

if (this.WindowState == FormWindowState.Minimized)//最小化 

{

HiddenForm();

}

}

private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)

{

e.Cancel = true;

HiddenForm();

}

/// summary

/// 显示窗口

/// /summary

private void ShowForm()

{

this.Show();

this.WindowState = FormWindowState.Normal;

this.ShowInTaskbar = true;

this.Activate();

} /// summary

/// 隐藏窗口

/// /summary

private void HiddenForm()

{

this.Hide();

}

(责任编辑:IT教学网)

更多

推荐测评专题文章