窗体应用程序

非模态对话框

弹出后用户可继续在应用程序中进行其他操作,通常用于显示用户需要经常访问的控件和数据。
非模态对话框使用Show()方法显示,模态对话框使用ShowDialog()方法显示

添加、设置对话框

添加窗体ModalessDialogBox
设置属性与模态对话框类似,其中ControlBox为true,FormBorderStyle为FixedToolWindow。
添加控件,不需添加两个按钮。

添加对话框属性

在ModalessDialogBox.cs文件中添加两个属性,为只写
具体代码:

        public Color DataColor{set{//清空radioButton选中标记radioButton1.Checked = false;radioButton2.Checked = false;radioButton3.Checked = false;if(value == Color.Red)radioButton1.Checked = true;if(value == Color.Yellow)radioButton2.Checked = true;else if(value == Color.Blue)radioButton3.Checked= true;} }public string DataTitle{set{textBox1.Text = value;} }

实现控件功能

非模态对话框经常与其他窗体进行交互操作,所以当对话框的状态发生改变时需要实时通知其他窗体(模态非模态的很大区别),即非模态对话框不用点击确定,即可在主窗体上反映对话框中的设置。

主窗体标题与文本框同步

        private void textBox1_TextChanged(object sender, EventArgs e){//得到父窗体Form1 fatherForm = (Form1)this.Owner;if(fatherForm != null)fatherForm.Text = textBox1.Text;}

每个选择发生改变时重新进行判定

        private void radioButton1_CheckedChanged(object sender, EventArgs e){if (radioButton1.Checked){//得到父窗体Form1 fatherForm = (Form1)this.Owner;//设置父窗体fatherForm.BackColor = Color.Red;}}private void radioButton2_CheckedChanged(object sender, EventArgs e){if (radioButton2.Checked){Form1 fatherForm = (Form1)this.Owner;fatherForm.BackColor = Color.Yellow;}}private void radioButton3_CheckedChanged(object sender, EventArgs e){if (radioButton3.Checked){Form1 fatherForm = (Form1)this.Owner;fatherForm.BackColor = Color.Blue;}}

显示、隐藏非模态对话框

非模态对话框是在主窗体形成时被加载,其被打开和关闭都是通过Show()和Hide()来实现的

        private void button1_Click(object sender, EventArgs e){//当按钮按下并且对话框还在显示时if (MdlessDlg.Visible){MdlessDlg.Hide();button1.Text = "显示非模态对话框";}else{//当按钮按下并且对话框没有显示时//注意使用Show();MdlessDlg.Show();button1.Text = "隐藏非模态对话框";}}

运行结果存在问题,留有bug

通用对话框

不同的Windows应用程序常常使用功能相同的对话框,如“打开”“保存”“打印”等,称为通用对话框。
使用通用对话框的方法:
1.设计窗体时从工具箱向窗体上拖放一个通用对话框控件。在程序中使用时设置它的属性,并调用ShowDialog()方法。(缺点:会在类中生命一个成员,在程序运行时始终占用内存,因此对资源利用率不高。优点:适用于程序中多次使用同一种通用对话框,节约时间,减少了创建对象的过程)
2.在运行时创建通用对话框对象、设置属性、调用它的ShowDialog()方法。(创建的对话框对象为临时的,生命周期通常很短,因此比较节约资源)

消息框

说明

1.C#中需要使用DialogResult类型的变量,用MessageBox.Show()方法接收消息对话框的返回值。
2.用户需在Show()方法中对其返回的选择按钮进行设置,如Ok、Cancel、Yes、No。
3.对Show()方法的调用使用可选的Style参数可以指定要在消息框中显示的图标类型。

实例1

为按钮添加代码:

        private void button1_Click(object sender, EventArgs e){string message = "你喜欢C#吗";     //消息框内容 string caption = "提问";          //消息框标题MessageBoxButtons buttons = MessageBoxButtons.YesNo;DialogResult result;result = MessageBox.Show(this, message, caption, buttons, MessageBoxIcon.Question,MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);if (result == DialogResult.Yes){ //do your action here}}

运行结果:

实例2

实例2:输入口令时不显示字符,全部显示星号,口令设置为“zhongguo”。弹出消息框告知是否输入正确,若不正确,设置“重试”按钮,清除原输入内容,焦点定位在文本框。
**具体步骤 :**添加控件,进行属性设置,将TextBox的MaxLength属性设置为8,PassWordChar属性设置为“*”
具体代码:

        public PassWord(){InitializeComponent();}private void btnOk_Click(object sender, EventArgs e){DialogResult result;if (this.txtPass.Text == "zhongguo"){MessageBox.Show(this, "口令输入正确", "消息框程序示例",MessageBoxButtons.OK, MessageBoxIcon.Question);}else{result = MessageBox.Show(this, "口令输入错误", "消息框程序示例",MessageBoxButtons.RetryCancel,MessageBoxIcon.Warning);//用户单击重试按钮if (result == DialogResult.Retry){this.txtPass.Text = "";this.txtPass.Focus();}//用户单击取消按钮else {Application.Exit();}}}//窗体的Load事件private void PassWord_Load(object sender, EventArgs e){//初始化操作,将口令文本框清空this.txtPass.Text = "";}//“退出”按钮的Click事件private void btnExit_Click(object sender, EventArgs e){Application.Exit();}

运行结果:

打开文件和保存文件对话框

打开文件对话框

通过OpenFileDialog类实现,该类封装在命名空间System.Windows.Forms中。
创建一个此类的对象:OpenFileDialog openFileDialog1 = new OpenFileDialog();

常用属性:

InitialDirectory:设置对话框中显示的初始化目录
Filter:设定对话框中的过滤字符串
FilterIndex:设定显示的过滤字符串的索引
RestoreDirectory:bool类型,设定是否重新回到关闭此对话框时的当前目录。
FileName:设定对话框中选择的文件名称
ShowHelp:在对话框中是否显示“帮助”按钮
Title:设定对话框的标题。

常用事件

FileOk:当用户单击“打开”或“保存”时要处理的事件
HelpQuest:当用户单击“帮助”按钮时要处理的事件

实例

实例:打开一个文件对话框
具体步骤:
(1)拖动一个OpenFileDialog控件到设计界面,设置属性:
Filter属性:Text Files(.txt)|.txt|Word(.doc)|.doc|All Files(.)|.
InitialDirectory属性:D:
FilterIndex属性:2
RestoryDirectory属性:true
(2)添加按钮,添加代码:

        private void button1_Click(object sender, EventArgs e){if (openFileDialog1.ShowDialog() == DialogResult.OK){MessageBox.Show("选择打开的文件\n" + openFileDialog1.FileName, "打开文件",MessageBoxButtons.OK, MessageBoxIcon.Information);}}}

运行结果:

保存文件对话框

通过SaveFileDialog类实现,该类封装在命名空间System.Windows.Forms中。
创建一个此类的对象:SaveFileDialog1 saveFileDialog = new SaveFileDialog();

保存文件对话框的常用属性与事件

与打开文件对话框的常用属性、事件相同

颜色选择对话框

分左右两部分,左半部分显示基本颜色和自定义颜色,右半部分编辑自定义颜色。
C#中颜色选择对话框的创建要通过System.Windows.Forms中的ColorDialog实现:ColorDialog ColorDialog1 = new ColorDialog();

常用属性

(1)AllowFullOpen:bool类型,用户是否可以使用自定义颜色
(2)FullOpen:bool类型,指定对话框打开时是否显示右边编辑的自定义颜色部分。为False时,单击“规定自定义颜色”按钮才会显示对话框右半部分。当AllowFullOpen属性为false时该属性不起作用
(3)Color:Color类型,指定对话框选择的颜色
(4)CustomColor:int数组,指定对话框显示的自定义颜色。数组中每个颜色即为一个颜色值。

实例

通过按钮单击事件使用颜色对话框更改颜色,在方法中生成对象,不使用控件
具体代码:

        private void btnOpenColorDialog_Click(object sender, EventArgs e){//构造对话框对象System.Windows.Forms.ColorDialog cdlg = new System.Windows.Forms.ColorDialog();//初始化自定义颜色cdlg.CustomColors = new int[]{0x0000ff,0xff0000,0x00ff00,0xff00ff,0xffff00,0xfffff };//不允许自定义颜色cdlg.AllowFullOpen = false;//显示对话框if (cdlg.ShowDialog() == DialogResult.OK){this.BackColor = cdlg.Color;}}

运行结果:

字体对话框

字体对话框的创建要通过System.Windows.Forms中的FontDialog类实现:FontDialog FontDialog1 = new FontDialog();

常用属性

(1)ShowColor:是否在对话框中显示“颜色”选项
(2)AllowScriptChange:是否允许使用者更改“字符集”选项
(3)Font:选择后的字体

常用事件

(1)Apply:当用户单击“应用”按钮时要处理的事件
(2)HelpRequest:当用户单击“帮助”按钮时要处理的事件

实例

实例:使用字体对话框更改窗体RichTextBox控件的字体
步骤:
添加菜单和RichTextBox控件
添加菜单单击事件的代码如下:

using FontDialog1 = System.Windows.Forms.FontDialog;        //别名使用指令,可为命名空间或类型定义别名namespace FontDialog_Example
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void menuItemFont_Click(object sender, EventArgs e){FontDialog1 fontDialog = new FontDialog1();           //FontDialog1为已被定义过的别名,可代替定义的命名空间或类型fontDialog.ShowColor = true;fontDialog.AllowScriptChange = true;fontDialog.AllowVectorFonts = true;fontDialog.ShowEffects = true;if (fontDialog.ShowDialog() == DialogResult.OK){this.richTextBox1.Font = fontDialog.Font;this.richTextBox1.ForeColor = fontDialog.Color;}}}
}

运行结果:

打印组件

共5种组件:
PrintDialog、PrintSetupDialog、PrintDocument、PrintPreviewDialog、PrintPreviewControl

PrintDocument(最重要)

用于设置一些属性,说明在应用程序中打印什么内容以及打印文档的能力,可以将它和PrintDialog组件一起使用来控制文档打印的各个方面。
建立和其他打印对象的联系

常用属性

(1)DefaultPageSettings:获取或设置页设置(用作要打印的所有页的默认设置)
(2)DocumentName:获取或设置打印文档时要显示的文档名(如在打印状态对话框或打印机队列中显示)
(3)OriginAtMargins:获取或设置一个值,指示与页关联的图形对象的位置是位于用户指定的边距内,还是位于该页可打印区域的左上角
(4)PrintController:获取或设置指导打印进程的打印控制器
(5)PrinterSettings:获取或设置对文档进行打印的打印机

常见方法 事件

常见方法:
Print:开始文档的打印进程
常见事件:
PrintPage:当需要打印输出当前页时发生

PrintPreviewDialog

是预先配置的对话框,用于显示PrintPreviewDialog组件在打印时的外观

常用属性

Document:获取或设置浏览的文档
UseAntiAlias:获取或设置一个值,该值指示打印是否使用操作系统的防锯齿功能

常用方法

ShowDialog:显示打印预览窗口

PrintDialog

是预先配置的对话框,用于选择1打印机、要打印的页以及其他打印相关的设置。

常用属性

AllowCurrentPage:获取或设置一个值,指示是否显示“当前页”选项按钮
AllowPrintToFile:指示是否显示“打印到文件”复选框
AllowSelection:指示是否启用“选择”选项按钮
AllowSomePage:指示是否启用“页”选项按钮
Document:指示用于获取PrinterSettings类的PrintDocument对象
PrinterSettings:获取或设置对话框所修改的打印机设置
PrintToFile:指示是否选中“打印到文件”复选框

常用方法

Reset:将所有选项、最后选定的打印机和页面设置重新设置为默认值
ShowDialog:显示“打印”对话框

实例

设计窗体如图:

具体代码:

//在窗体中绘制要打印的数据private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e){e.Graphics.DrawString(label1.Text, new Font("宋体", 10, FontStyle.Regular),Brushes.Black, 260, 400);e.Graphics.DrawString(textBox1.Text, new Font("宋体", 10, FontStyle.Regular),Brushes.Black, 330, 400);e.Graphics.DrawString(label2.Text, new Font("宋体", 10, FontStyle.Regular),Brushes.Black, 270, 420);e.Graphics.DrawString(textBox2.Text, new Font("宋体", 10, FontStyle.Regular),Brushes.Black, 330, 420);e.Graphics.DrawString(label3.Text, new Font("宋体", 10, FontStyle.Regular),Brushes.Black, 270, 440);e.Graphics.DrawString(textBox3.Text, new Font("宋体", 10, FontStyle.Regular),Brushes.Black, 330, 440);}//执行打印窗体中的数据操作private void button1_Click(object sender, EventArgs e){printDialog1.ShowDialog();printPreviewDialog1.Document = this.printDocument1;printPreviewDialog1.ShowDialog();}

运行结果:


注:PrintDocument的PrintPage事件在打印当前页之前被激发,此段代码将要打印的文本输出到PrintDocument

内容参考清华大学出版社《C#程序设计实用教程(第二版)》

Windows应用程序进阶2(非模态对话框 通用对话框)相关推荐

  1. c#中的模态对话框和非模态对话框

    模态对话框 弹出窗口阻止调用窗口的所有消息响应. 只有在弹出窗口结束后调用窗口才能继续. 在模态窗口"关闭"后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值. 非模态 ...

  2. QT中的模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

  3. 模态对话框与非模态对话的几种销毁方法与区别

    From: http://renjwjx.blog.51cto.com/811549/191320/ 前几天发现自己的程序中使用非模态对话框,Debug版本有警告提示如下: Warning: call ...

  4. html弹出非模式窗口,JavaScript模态窗口和非模态窗口(转)

    JavaScript中弹出的窗口有模态窗口和非模态窗口.模态窗口就是打开一个子窗口,如果这个子窗口不关闭,就不能操作它的父窗口,原来程序暂停执行,直到这个模态窗口关闭 后才回到原来程序继续.非模态的就 ...

  5. [QT_040]Qt学习之通用对话框:QColorDialog、QFontDialog、QInputDialog

    本文转自:<Qt编程指南>        作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 11.3 通用对话框:QColorDialog/QFontDi ...

  6. 二级VB培训笔记07:通用对话框

    二级VB培训笔记07:通用对话框 通用对话框(CommonDialog)控件提供了一组标准对话框界面,包括打开文件.保存文件.选择颜色.选择字体.设置打印机和帮助等六个对话框.这些对话框只能返回用户输 ...

  7. Windows SDK 非模态对话框的消息处理

    在SDK中使用非模态对话框时的几个问题: 1.为什么要调用IsDialogMessage?? 2.非模态对话框与主窗口有什么区别? 3.如果不调用IsDialogMessage,消息能不能传递到对话框 ...

  8. c#模态对话框从内部退出_C#模态对话框和非模态对话框

    模态对话框 弹出窗口阻止调用窗口的所有消息响应. 只有在弹出窗口结束后调用窗口才能继续. 在模态窗口"关闭"后,可以读取模态窗口中信息,包括窗口的返回状态,窗口子控件的值. 非模态 ...

  9. 模态对话框和非模态对话框的消息循环分析

    1.非模态对话框和父窗口共享当前线程的消息循环 2.模态对话框新建一个新的消息循环,并由当前消息循环派发消息,而父窗口.模态对话框屏蔽了用户对它父窗口的操作,但是不是在消息循环里面屏蔽,所以给父窗口发 ...

  10. MFC非模态对话框实例

    [转载]MFC非模态对话框实例 2012-06-17 16:21:41|  分类: C++/MFC |  标签: |字号大中小 订阅 实例目的 在Windows环境中,对话框是一种常用的输入输出手段. ...

最新文章

  1. 【干货】七步,让你的网页表单更亲切
  2. 逻辑回归还能这样解?关于Kernel Logistic Regression的详细解释
  3. 我把上课的机器学习课件发给了国内300多位高校老师
  4. Python实现完全二叉树
  5. 【实践】图推荐算法在EE问题上的应用(附交流视频和PPT下载链接)
  6. docker入门与实战pdf_Docker-Kubernetes-k8s微服务实战视频教程+Docker技术入门精讲课程资料分享...
  7. 软件发布!DOTA2统计学
  8. 浅谈Hybrid技术的设计与实现
  9. java并发编程(4)--单例模式的安全问题 volatile
  10. 2022医疗AI行业研究白皮书 附下载
  11. Win8之常用快捷键(1)
  12. 希腊字母|罗马数字|中文数字大写
  13. docker部署mysql出错:mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 13 - Permission denied)
  14. Java 实现企业级支付
  15. 关于Vue.js和React.js,听听国外的开发者怎么说?
  16. SLG手游的战斗抽象
  17. pycharm中运行代码
  18. 【认知】眼见为实吗?也许你看到的并不是真实的:视觉恒常性
  19. MAC系统免驱显卡汇总
  20. STM32F1与STM32CubeIDE编程实例-光断续传感器驱动

热门文章

  1. 矩阵分解:特征值分解、SVD分解、舒尔分解、谱分解
  2. SketchUp2019下载SU2019下载安装教程SketchUp草图大师2019下载安装详细教程
  3. 微信修改步数 Android,安卓微信怎么改步数
  4. 51单片机计算机加原理图,MCS-51单片机最小系统的组成部分及电路图介绍
  5. python扫雷总结与体会_扫雷项目总结
  6. AHCI模式安装XP以及驱动下载
  7. Linux TTY 串口 struct termios结构体参数
  8. 矩阵求导法则与性质,机器学习必备~
  9. 收藏+下载!Flink 社区 2021 最新最全学习渠道汇总
  10. 大疆无人机飞控系统的原理、组成及各传感器的作用