Winform操作经验总结
2018-01-23 17:13
375 查看
虽然经验都是在不知不觉中形成的,但如果记录下来,应该会在一定程度上加快积累经验的速度。因此,最近在熟悉一个WINFORM程序后台的过程中,重新梳理一下WINFORM的操作技巧,以便有所收获。
1.DateTime myDateTime = DateTime.Parse(myDateTimeValue);将日期和时间的指定字符串表示转换成其等效的DateTime。
2.获取应用程序的当前工作目录。System.IO.Directory.GetCurrentDirectory()。 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。System.Environment.CurrentDirectory
3.获取模块的完整路径。System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取程序的基目录 System.AppDomain.CurrentDomain.BaseDirectory
4.有时候我们会需要清除一个表格中的所有资料。要达到者个目的,一种方式是我们在SQL DROP 那一页 看到的DROP TABLE 指令。不过这样整个表格就消失,而无法再被用了。另一种方式就是运用TRUNCATE TABLE 的指令。在这个指令之下,表格中的资料会完全消失,可是表格本身会继续存在。TRUNCATE TABLE 的语法为下:
TRUNCATE TABLE "表格名";
5.我们将可能会出错的sql 写在begin try...endtry 之间,若出错,刚程序就跳到紧接着的begin try...endtry 的beign catch...endcatch
6.begin Transaction 可以理解成新建一个还原点。
commit Transaction 提交这个自begin tran开始的修改
rollback Transaction 表示还原到上个还原点。
7.隐藏TabControl的标签栏: tabControl1.SizeMode = TabSizeMode.Fixed;
tabControl1.ItemSize = new Size(0, 1); 设计好之后,将这个控件的位置向上移动,正好让标签栏看不到(被挡住。
8.int.TryParse(string s, out int result),当无法完成转换时,返回false,result置零,而且永远不会抛异常。
当一个地方是从数据库中取出的值,虽然在程序中用字符串存储,但在数据库中确实是整型字段。这时,其实是没有必要用int.TryParse的。因为先前在存入数据库时就验证过了。假使这里抛了异常,也不是这个地方出了错,而应该去输入判定的地方检验。也就是说,这里的异常是不允许抛的,一旦抛出,就说明这个BUG是程序员的责任——先前的输入判定没有做好。
9. 代码中给按钮添加事件。button5.Click += new EventHandler(showMSG);
private void showMSG(object sender, EventArgs e)
{
Button bc = (Button)sender;
MessageBox.Show(bc.Name);
}
10.Winform中的两个TIMER
10.1.System.Windows.Forms.Timer 来自msdn A Timer is used to raise an event at user-defined intervals. This Windows timer is designed for a single-threaded environment where UI threads are used to perform processing. 这句话可以看到这个Timer的事件触发后是运行在UI线程的,如果在这个方法里面执行了耗时任务,则会造成UI界面卡死。
10.2.System.Threading.Timer 来自msdn Provides a mechanism for executing a method on a thread pool thread at specified intervals.这句话可以看到这个Timer事件触发后是运行在后台线程的,也就是说在这个事件触发后,不能访问UI控件。如果要在这个事件里面访问UI控件,必须通过BeginInvoke方法把数据传递到UI线程去执行。
10.3System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法来启动计时,通过Stop()方法或者Enable=false停止计时。AutoReset属性设置是否重复计时(设置为false只执行一次,设置为true可以多次执行)。Elapsed事件绑定相当于另开了一个线程,也就是说在Elapsed绑定的事件里不能访问其它线程里的控件(需要定义委托,通过Invoke调用委托访问其它线程里面的控件)。
11.窗体的透明设置可以通过 this.TransparencyKey = Color.White; this.BackColor = Color.White;进行设置,同时窗体上的控件是可见的。
12.如果设置了窗体的TOPMOST后,窗体会一直显示在前面,但通过设置原来窗体的失去获取焦点事件来改变其他窗体的该属性,可以实现同步多个窗体同步显示。
13.非顶级窗体无法透明。
14.通过设置窗体的相关属性,可以让该窗体在任务栏不显示。this.ShowInTaskbar = false;
15. 通过判断一个窗体的Focused是否为True可以判断该窗体是否为活动窗体。
16. 解决winform窗体闪烁问题 请在构造函数里面底下加上如下几行:
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
17.阻止重绘和恢复重绘。
[DllImport("User32.dll", CharSet=CharSet.Auto, SetLastError=true)]
internal static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);
//开始对控件操作
禁止重绘:SendMessage(禁止重绘的控件.Handle, 11, 0, 0);
//对控件的操作过程
恢复重绘:SendMessage(恢复重绘的控件.Handle, 11, -1, 0);
18.直接打开指定的文件: System.Diagnostics.Process.Start(v_OpenFilePath); 直接打开目录 :string v_OpenFolderPath = @"目录路径"; System.Diagnostics.Process.Start("explorer.exe", v_OpenFolderPath); 19.
1.DateTime myDateTime = DateTime.Parse(myDateTimeValue);将日期和时间的指定字符串表示转换成其等效的DateTime。
2.获取应用程序的当前工作目录。System.IO.Directory.GetCurrentDirectory()。 获取和设置当前目录(该进程从中启动的目录)的完全限定目录。System.Environment.CurrentDirectory
3.获取模块的完整路径。System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName 获取程序的基目录 System.AppDomain.CurrentDomain.BaseDirectory
4.有时候我们会需要清除一个表格中的所有资料。要达到者个目的,一种方式是我们在SQL DROP 那一页 看到的DROP TABLE 指令。不过这样整个表格就消失,而无法再被用了。另一种方式就是运用TRUNCATE TABLE 的指令。在这个指令之下,表格中的资料会完全消失,可是表格本身会继续存在。TRUNCATE TABLE 的语法为下:
TRUNCATE TABLE "表格名";
5.我们将可能会出错的sql 写在begin try...endtry 之间,若出错,刚程序就跳到紧接着的begin try...endtry 的beign catch...endcatch
6.begin Transaction 可以理解成新建一个还原点。
commit Transaction 提交这个自begin tran开始的修改
rollback Transaction 表示还原到上个还原点。
7.隐藏TabControl的标签栏: tabControl1.SizeMode = TabSizeMode.Fixed;
tabControl1.ItemSize = new Size(0, 1); 设计好之后,将这个控件的位置向上移动,正好让标签栏看不到(被挡住。
8.int.TryParse(string s, out int result),当无法完成转换时,返回false,result置零,而且永远不会抛异常。
当一个地方是从数据库中取出的值,虽然在程序中用字符串存储,但在数据库中确实是整型字段。这时,其实是没有必要用int.TryParse的。因为先前在存入数据库时就验证过了。假使这里抛了异常,也不是这个地方出了错,而应该去输入判定的地方检验。也就是说,这里的异常是不允许抛的,一旦抛出,就说明这个BUG是程序员的责任——先前的输入判定没有做好。
9. 代码中给按钮添加事件。button5.Click += new EventHandler(showMSG);
private void showMSG(object sender, EventArgs e)
{
Button bc = (Button)sender;
MessageBox.Show(bc.Name);
}
10.Winform中的两个TIMER
10.1.System.Windows.Forms.Timer 来自msdn A Timer is used to raise an event at user-defined intervals. This Windows timer is designed for a single-threaded environment where UI threads are used to perform processing. 这句话可以看到这个Timer的事件触发后是运行在UI线程的,如果在这个方法里面执行了耗时任务,则会造成UI界面卡死。
10.2.System.Threading.Timer 来自msdn Provides a mechanism for executing a method on a thread pool thread at specified intervals.这句话可以看到这个Timer事件触发后是运行在后台线程的,也就是说在这个事件触发后,不能访问UI控件。如果要在这个事件里面访问UI控件,必须通过BeginInvoke方法把数据传递到UI线程去执行。
10.3System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法来启动计时,通过Stop()方法或者Enable=false停止计时。AutoReset属性设置是否重复计时(设置为false只执行一次,设置为true可以多次执行)。Elapsed事件绑定相当于另开了一个线程,也就是说在Elapsed绑定的事件里不能访问其它线程里的控件(需要定义委托,通过Invoke调用委托访问其它线程里面的控件)。
11.窗体的透明设置可以通过 this.TransparencyKey = Color.White; this.BackColor = Color.White;进行设置,同时窗体上的控件是可见的。
12.如果设置了窗体的TOPMOST后,窗体会一直显示在前面,但通过设置原来窗体的失去获取焦点事件来改变其他窗体的该属性,可以实现同步多个窗体同步显示。
13.非顶级窗体无法透明。
14.通过设置窗体的相关属性,可以让该窗体在任务栏不显示。this.ShowInTaskbar = false;
15. 通过判断一个窗体的Focused是否为True可以判断该窗体是否为活动窗体。
16. 解决winform窗体闪烁问题 请在构造函数里面底下加上如下几行:
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
17.阻止重绘和恢复重绘。
[DllImport("User32.dll", CharSet=CharSet.Auto, SetLastError=true)]
internal static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);
//开始对控件操作
禁止重绘:SendMessage(禁止重绘的控件.Handle, 11, 0, 0);
//对控件的操作过程
恢复重绘:SendMessage(恢复重绘的控件.Handle, 11, -1, 0);
18.直接打开指定的文件: System.Diagnostics.Process.Start(v_OpenFilePath); 直接打开目录 :string v_OpenFolderPath = @"目录路径"; System.Diagnostics.Process.Start("explorer.exe", v_OpenFolderPath); 19.
相关文章推荐
- 最近几天在winform系统界面操作,流程操作上的经验总结.
- Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录
- Aix下操作FileNet经验总结
- 用 c# 来操作WORD的经验总结
- 串口操作经验总结
- 用 c# 来操作WORD的经验总结
- 转:c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- HALCON初步:常用操作经验总结
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- SQL大量数据操作 切身经验总结
- (转)基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作
- C# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- 基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- 基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作
- char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)
- Java集合类操作优化经验总结
- char, wchar_t, TCHAR 字符全总结 & c++字符串操作经验集
- Windows api关于注册表的操作经验和总结