C# 非模态窗体(show)实现模态窗体(ShowDialog)的效果
2011-03-21 16:09
453 查看
模态窗体(ShowDialog)打开后,后面的主窗体就不能做任何操作了。
本博客要实现非模态窗体(show)实现模态窗体(ShowDialog)的一些效果(主窗体关闭,子窗体也要关闭。子窗体只能打开一个。)
同时,保留非模态窗体的一些特性(主窗体和子窗体都能操作,比如文本的书写等)。
现实的一些用处:
1、比如要在主窗体中写已有的内容,用子窗体显示这些已有的内容(一般信息比较多,无法在主窗体中用某个空间显示完全)以供参考。
2、直接点击子窗体中的信息,在主窗体中显示出来。
等等
代码如下:
FormA----主窗体
FormB----子窗体
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
MainForm为了显示主窗体(FormA)关闭,子窗体(FormB)也关闭。
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
摘自红色黑客联盟(www.7747.net) 原文:http://www.7747.net/kf/201007/52817.html
本博客要实现非模态窗体(show)实现模态窗体(ShowDialog)的一些效果(主窗体关闭,子窗体也要关闭。子窗体只能打开一个。)
同时,保留非模态窗体的一些特性(主窗体和子窗体都能操作,比如文本的书写等)。
现实的一些用处:
1、比如要在主窗体中写已有的内容,用子窗体显示这些已有的内容(一般信息比较多,无法在主窗体中用某个空间显示完全)以供参考。
2、直接点击子窗体中的信息,在主窗体中显示出来。
等等
代码如下:
FormA----主窗体
FormB----子窗体
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace BasicWindowsApplication { public partial class FormA : Form { FormB formB = null; public FormA() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (formB == null) { formB = new FormB(this);//这一步很重要 formB.CloseFrm += new EventHandler(frmA_CloseFrm); formB.Show(); } else { formB.TopMost = true; } } /// <summary> /// 窗体关闭事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void frmA_CloseFrm(object sender, EventArgs e) { formB = null; } /// <summary> /// 窗体关闭事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmA_FormClosed(object sender, FormClosedEventArgs e) { if (formB != null) { formB.Dispose(); } } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace BasicWindowsApplication { public partial class FormA : Form { FormB formB = null; public FormA() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (formB == null) { formB = new FormB(this);//这一步很重要 formB.CloseFrm += new EventHandler(frmA_CloseFrm); formB.Show(); } else { formB.TopMost = true; } } /// <summary> /// 窗体关闭事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void frmA_CloseFrm(object sender, EventArgs e) { formB = null; } /// <summary> /// 窗体关闭事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmA_FormClosed(object sender, FormClosedEventArgs e) { if (formB != null) { formB.Dispose(); } } } } view plaincopy to clipboardprint? ·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace BasicWindowsApplication { public partial class FormB : Form { FormA formA; public event EventHandler CloseFrm; public FormB(FormA frm) { formA = frm; InitializeComponent(); this.FormClosed += new FormClosedEventHandler(FrmB_FormClosed); } /// <summary> /// 窗体关闭事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void FrmB_FormClosed(object sender, FormClosedEventArgs e) { if (CloseFrm != null) { CloseFrm(sender, e); } } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace BasicWindowsApplication { public partial class FormB : Form { FormA formA; public event EventHandler CloseFrm; public FormB(FormA frm) { formA = frm; InitializeComponent(); this.FormClosed += new FormClosedEventHandler(FrmB_FormClosed); } /// <summary> /// 窗体关闭事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void FrmB_FormClosed(object sender, FormClosedEventArgs e) { if (CloseFrm != null) { CloseFrm(sender, e); } } } }
MainForm为了显示主窗体(FormA)关闭,子窗体(FormB)也关闭。
view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
public partial class MainForm: Form { public MainForm() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { FormA formA = new FormA(); formA.ShowDialog(); } } public partial class MainForm: Form { public MainForm() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { FormA formA = new FormA(); formA.ShowDialog(); } }
摘自红色黑客联盟(www.7747.net) 原文:http://www.7747.net/kf/201007/52817.html
相关文章推荐
- C# 非模态窗体(show)实现模态窗体(ShowDialog)的效果
- C# 非模态窗体(show)实现模态窗体(ShowDialog)的效果
- C# 非模态窗体(show)实现模态窗体(ShowDialog)的效果
- C#实现窗体淡入淡出效果的几种方法
- C# 窗体位置 Show和ShowDialog
- 使用Tesseract (OCR)实现简单的验证码识别(C#)+窗体淡入淡出效果
- monotouch实现winform中ShowDialog效果
- C#实现窗体淡入淡出效果的几种方法(转)
- C#实现窗体淡入淡出效果的几种方法(转)
- C# 窗体位置 Show和ShowDialog(转)
- C# 窗体位置 Show和ShowDialog(转)
- C#迅雷七窗体特效,使用DWM实现Aero Glass效果
- C#实现窗体截图(代码+效果)
- C# 无边框窗体边框阴影效果的简单实现
- C#实现窗体淡入淡出效果的方法总结
- C#实现具有Aero效果的窗体
- 使用C#实现WinForm窗体的动画效果
- 使用C#实现WINFORM窗体的动画效果
- 用JqueryUI的Dialog+IFrame实现仿模态窗口效果
- C#迅雷七窗体特效,使用DWM实现Aero Glass效果