Winform相关

(1)C# WinForm程序退出的方法

1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;

2.Application.Exit();  强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;

3.Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;

4.System.Environment.Exit(0);   这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。

(2)每个finally里面都写GC.Collect()有坏处吗?

没好处,垃圾回收机制最好不要控制,一般GC会在最适合的时间进行垃圾回收,频繁调用GC.Collect()反而会造成不必要的资源耗费,因为.NET内部已经分成了3代内存存储,很大程度避免垃圾回收的代价,还有,一般在编译的时候,编译器已经帮你添加了相应的FINALLY了,除非你很明确你使用的资源是否是非托管资源 与该资源耗费的内存量。

——WebRequest、WebClient、Socket、和数据库对象使用的资源是不是非托管资源呢?

——一般涉及到 数据流的  比如具有 stream 特性的资源,最好都using()去控制,具体你可以查阅相关类的特性 就像 Socket 很明显就是一个数据流方式的类,具体的细节要看你应用场景了。

(3)winform 判断硬盘上的文件是否存在,不存在则在硬盘上建立一个文件,txt,创建文件...

判断文件存不存在 第一个方法

File.Exists(Application.StartupPath + "\\AlarmSet.txt")

判断文件存不存在 第二个方法

System.IO.DirectoryInfo info = new System.IO.DirectoryInfo(Application.StartupPath + "\\AlarmSet.txt");
MessageBox.Show(info.Exists.ToString());

创建文件

File.Create(Application.StartupPath + "\\AlarmSet.txt");//创建该文件

(4) Form 的 this.close() 和 this.dispose ()的區別

close方法在释放资源后还可以继续使用,并没有在内存中删除,但是dispose方法会从内存中删除该资源,而你就不能再使用它!

例如:你有两个窗体Form1和Form2,你在第一个窗体中用Form2 XXX=new Form2然后你调用close方法,这时资源还在,你仍可以用XXX.show()方法使用Form2,但是如果你用的是dispose方法,那么该资源就不存在了,如果这时你调用XXX.show()方法的话,就会出错!

(5)C#中强制关闭某个进程

/// <summary>
        /// 关闭进程
        /// </summary>
        /// <param name="processName">进程名</param>
        private void KillProcess(string processName)
        {
            Process[] myproc = Process.GetProcesses();
            foreach (Process item in myproc)
            {
                if (item.ProcessName == processName)
                {
                    item.Kill();
                }
            }
        }

※相關鏈接:

https://blog.csdn.net/weizhiai12/article/details/6930780

(6)C#中操作EXCEL后,关闭对象但EXCEL进程仍然存在的解决办法.

现象 :我在C#中,需要从EXCEL导入或者导出数据,当导入导出结束后,使用excelApp.Quit()关闭EXCEL对象,但系统进程中仍然存在EXCEL进程.并没有关闭.

原因:其实excelApp.Quit();方法是可以正确的释放EXCEL进程的,我们导入导出EXCEL时,普遍方法是代码后台处理,前台并隐藏EXCEL界面,也就是excelApp.Visible = false (这是默认值,不设置的话也是False),当调用 excelApp.Quit()时,EXCELE会弹出个对话框,问你是否保存,而excelApp.Visible = false 时,保存对话框也一并隐藏掉了,所以EXCEL卡在了这个地方,造成了EXCEL不能正常释放进程.

解决方法:设置excelApp.DisplayAlerts = false,就是不提问任何提示,这样再关闭EXCEL对象时,就不会有保存提示,也就不会卡住了

※相關鏈接:

https://bbs.csdn.net/topics/390898375

https://blog.csdn.net/spw55381155/article/details/79891108

(7)C#/winform设置窗体自动缩放适应不同尺寸的电脑屏幕大小

由于要用winform开发一个桌面安装版考试软件,用户量也比较多,

所以很多用户反映软件的界面经常超出屏幕,部分功能或内容无法显示完整。

软件界面有几个设置大小固定为宽1066, 高718。

我本机的开发电脑是宽屏的,所以显示效果还是不错,但是用户的电脑配置千奇百怪,

各种尺寸都有,居然还有用几年前的上网本来使用的,导致界面超出了,无语啊。

 

之前我想了一种方式就是,主界面自动最大化(自动获取屏幕大小设置为界面自身大小),

然后就是把主窗体设置为容器模式,把所有的窗体都在主窗体内显示,如果子窗体比父窗体大,

父窗体则会自动出现滚动条,不会出现子窗体内容不能显示完整的情况。

这种模式虽然可以,但是好好的程序再去改成这样,就懒得弄了,

今天看窗体属性,突然发现一个AutoScaleMode属性,

百度了一下,居然可以设置窗体随着分辨率改变来适应电脑屏幕。

系统默认是:Inherit 。

① None : 禁用自动缩放。(默认时)

② Font :根据类使用的字体(通常为系统字体)的维度控制缩放。

       如果希望控件或窗体根据操作系统中字体的大小进行拉伸或缩小,则按 Font 缩放十分有用,如果控件或窗体的绝对大小无关紧要,则应使用这种方式进行缩放。比如:一个按钮的文字,改变了系统的字体大小,按钮也随着变大到能完整显示文字。

 ③ Dpi : 根据显示分辨率控制缩放。常用分辨率为 96 和 120 DPI。

       如果要相对于屏幕确定控件或窗体的大小,则按 Dpi 缩放十分有用。例如,对于显示图表或其他图形的控件,可能希望使用每英寸点数 (DPI) 缩放,以便该控件始终占据一定百分比的屏幕

④ Inherit   : 根据类的父类的缩放模式控制缩放。如果不存在父类,则禁用自动缩放。

 

AutoScaleMode属性设置好之后,最好还要搭配另外三个属性来控制窗体的大小。如下:

Autosize=false,设置窗体不根据内容超出而调整窗体自身大小,以免窗体超出屏幕。

AutoScroll=true,设置窗体当内容超出窗体时,自动产生滚动条。这样用户依靠滚动条既可以完全看到超出窗体的内容了。

MaximizeBox=true,可设置窗体最大化,当窗体超出屏幕时,用户可设置窗体最大化来让窗体尺寸贴合用户屏幕。

(8)Winfrom如何进行左边菜单栏,右边内容的设计

https://blog.csdn.net/m0_37986311/article/details/81604953

转载于:https://www.cnblogs.com/Y-A-N/p/10756824.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值