ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Winform相关

2019-04-23 15:51:19  阅读:308  来源: 互联网

标签:控件 excelApp 缩放 EXCEL 窗体 设置 相关 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

标签:控件,excelApp,缩放,EXCEL,窗体,设置,相关,Winform
来源: https://www.cnblogs.com/Y-A-N/p/10756824.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有