您的位置:首页 > 其它

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: