控件相关
1.文本框/label高度
文本框Multiline属性,设为true就可以了。改完高度后再将此属性改回来,要不然多行文本框,按回去就去下一行了。
label的改autoSize属性,设为false就可以了。
2.控件中文字居中
TextAlign属性:MiddleCenter
3.颜色属性
直接输入 #xxxx
4.如何去掉button按钮的边框线
设置FlatStyle为Flat,并且设置FlatAppearance下的BorderSize为0。将按钮所在的容器的底色和按钮颜色设置为不同的。
5.ComboBox
下拉列表的高度通过字体大小来改变,微软雅黑,12pt(小四)
DrawMode 默认设置为normal就好,设置为 OwnerDrawVariable,高度可变,但是此时下拉列表的值为不可见的(尽管存在)。
6.DataGridView
- 宽度和字体
显示宽度属性:AutoSizeColumnsMode:AllCells
或者设置高度小一点:
字体:columnHeadersDefaultCellStyle、DefaultCellStyle
- 类型checkboxColumn的选中
首先DataGridView必须设置可编辑。
1、用DataGridViewRow.Cells[0].EditedFormattedValue.ToString()=="True"
不用FormattedValue,它是操作提交后的结果,而EditedFormattedValue是当前的结果,不管结果是否已经提交。
2、DataGridViewCheckBoxColumn设置CheckBox默认选中
((DataGridViewCheckBoxCell)dgvDownloadList.Rows[i].Cells["Column1"]).Value = true;
3、设置是否选中
dataGridViewSiteInfo.Rows[i].Cells[0].Value = "True";
http://blog.csdn.net/wzy0754/article/details/52368377
- 单击DataGridView中一单元格后立即进入编辑状态
将datagridview1的SelectionMode设置为FullRowSelect(某一行全选中),
在双击事件中代码如下
private void datagridview1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{ this.datagridview1.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly = false;//将当前单元格设为可读
7.datetimepicker初始为空值的方法
方法一:
在窗口初始化函数中添加,并在日期改变事件里定义格式:
dateTimePickerEnd.Format = DateTimePickerFormat.Custom; dateTimePickerEnd.CustomFormat = " "; private void dateTimePickerEnd_ValueChanged(object sender, EventArgs e) { dateTimePickerEnd.CustomFormat = "yyyy-MM-dd HH:mm:ss"; }
方法二:
在日期控件上面覆盖一个文本框,然后初始化时候文本框是空值,每次日期选择之后将值赋在文本框里面。
窗体属性
1. 窗体不加边框
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.StartPosition = FormStartPosition.CenterScreen;
2. 窗体只显示一个
static formDevice _formDevice;
if(_formDevice==null||_formDevice.IsDisposed )
{
_formDevice = new formDevice();
_formDevice.Show();
}
else
{
_formDevice.WindowState = FormWindowState.Normal;
_formDevice.Activate();
}
程序启动【单例】
//获取欲启动进程名 string strProcessName = System.Diagnostics.Process.GetCurrentProcess().ProcessName; ////获取版本号 //CommonData.VersionNumber = Application.ProductVersion; //检查进程是否已经启动,已经启动则显示报错信息退出程序。 if (System.Diagnostics.Process.GetProcessesByName(strProcessName).Length > 1) { MessageBox.Show("程序已经运行!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); Application.Exit(); return; }
EXE 图标修改问题
1、窗体属性中找到Icon,单击最右侧的“…”按钮,选择备好的ico图标。【这时窗体图标已经变化了,这是程序内部显示图标的修改方法】
2、程序外部图标的修改方法
右击项目名称,在下拉列表中选择“属性”,
会发现生成的bin目录下的exe图标已经发生变化了。
3、修改ico文件,却发现生成的exe图标未发生变化。重新生成项目也一样,清理后再生成也一样
网上看到的解决方案是:
可能是资源管理器的问题,估计它是有一个缓存,所以在资源管理器中总是显示原来那个图标, 我把这个EXE文件拷到其他文件夹下,图标就正确显示了。
还有,你也可以按住CTRL+滚动鼠标 改变图标的大小(文件的大图标显示和小图标显示),这时你也可以观察到已经改变的图标。
C#界面假死问题
当一个WinForm程序在事件函数中进行IO操作、网络操作或耗CPU大的操作时,窗体会出现明显的卡顿现象。原因在于窗体的消息循环被耗时的操作停住了,UI线程被阻塞。在相关操作没有完成之前,用户不能对窗体进行任何的操作,包括关闭应用程序。
解决思路是——能不能将阻塞线程的操作在另外一个线程中执行,这样就不会堵塞UI线程。
然而从另外一个线程操作windows窗体上的控件,就会和主线程产生竞争,造成不可预料的结果。因为windowsGUI编程有一个规则,就是只能通过创建控件的线程来操作控件的数据。
好在因此Control类实现了ISynchronizeInvoke接口,提供了Invoke和BeginInvoke方法来提供让其它线程更新GUI界面控件的机制。
两者区别是:Invoke,需要等待委托的方法执行返回后才执行下面的代码;begininvoke则不需要。
private void buttonX1_Click(object sender, EventArgs e) { Waitting waitting = new Waitting(); waitting.Show(); Task.Factory.StartNew(() => // 将阻塞线程的操作在另外一个线程中执行,这样就不会堵塞UI线程。 { ConnectSDE(); //运行时间5s左右 MessageBox.Show("连接SDE数据库成功", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); waitting.BeginInvoke((Action)waitting.Close);//BeginInvoke方法返回UI线程更新UI界面控件的机制。 }); }
参考:解决C#界面假死问题