WinForm开发之点滴整理
一.添加资源(图片,文字之类)
Winform开发中经常会要用到一些文件,例如给控件加背景图之类的。但是Winform不想Web开发,直接把图片放到项目下,调用的时候直接相对目录就可以了。
WinForm里就相对比较麻烦了,可以通过下面方式实现:
①在工程的根目录下找到文件夹Properties,下的文件Resources.resx,双击打开
②添加资源=>添加现有文件 选择好后保存即可。
③给控件绑定图片时,肯定会打开"选择资源"窗口(这个应该都见过)。选择"项目资源文件",这样之前添加的文件就会自动显示在下面,选中 确定 OK。
二.两个combobox共用一个数据源的问题
当在一个页面中多个combobox共用一个数据源时,就会发生一个奇怪的现象:如果一个combobox的选中状况发生变化时,其他的也会发生同样的变化(即选中的项一直是相同的)。
数据源有多种类型,这里给出DataSet和List的解决方法:
①DataSet可以使用Copy方法:
DataSet ds = new DataSet(); comboBox1.DataSource = ds; comboBox2.DataSource = ds.Copy();
②List可以使用ToArray或ToList方法:
List<int> list = new List<int>(); list.Add(10); list.Add(20); list.Add(30); comboBox1.DataSource = list; comboBox2.DataSource = list.ToArray();
List<int> list = new List<int>(); list.Add(10); list.Add(20); list.Add(30); comboBox1.DataSource = list; comboBox2.DataSource = list.ToList();
三.当关闭子窗口时,父窗口也随之关闭的问题
原因不详
解决方法:当窗口关闭的时候,在窗口关闭事件对象会有一个存放关闭原因的属性(CloseReason)和是否取消关闭属性(Cancel)
在父窗口的关闭事件中,如果是因为子窗口关闭而引起的关闭,则e.CloseReason是CloseReason.None;
如果是用户点击的关闭按钮或者执行Form.Close()方法的话,则e.CloseReason是CloseReason.UserClosing;
所以只需要判断e.CloseReason的值,然后设定e.Cancel为true(取消关闭)即可。
private void Main_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.None) { e.Cancel = true; } }
四.禁止窗口的可调整大小
设置Form的FormBorderStyle为FixedSingle
去掉最大化最小化按钮:将MaximizeBox和MinimumBox设为false;