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
Winform相关的更多相关文章
- WinForm相关注意点
1. //this.dgvEmployees.ColumnHeadersDefaultCellStyle.ForeColor = Color.Blue; //dgvEmployees.RowHeade ...
- WinForm编程数据视图之DataGridView浅析
学习C#语言的朋友们肯定或多或少地接触到了WinForm编程,在C#语言的可视化IDE中(如VS.NET中)使用设计器可以让我们轻松地完成窗体.按钮.标签.图片框等等控件的组合,我们可以轻易地做出界面 ...
- winform 学习之qq邮箱正则验证及常用正则
这段时间一直再做winform相关的项目,记录了一些东西 qq邮箱正则表达式: 第一种:字母和数字组合邮箱判断 string str = "justin1107@qq.com"; ...
- ArcMap插件开发初识:Add In
之前一直在做ArcEngine的相关开发,做的winform相关,新换了工作,又开始新的学习旅程! Add In 这个东西很早就知道有,但是一直没有用过,因为之前的公司有自己框架,接口,虽然我也是做插 ...
- 将传统 WPF 程序迁移到 DotNetCore 3.0
介绍 由于历史原因,基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序,如果将这些程序全部基于 DotNetCore 3.0 重写一遍 ...
- .NET Windows Form 改变窗体类名(Class Name)有多难?
研究WinForm的东西,是我的一个个人兴趣和爱好,以前做的项目,多与WinForm相关,然而这几年,项目都与WinForm没什么关系了,都转为ASP.NET MVC与WPF了.关于今天讨论的这个问题 ...
- DevExpress源码编译总结 z
本篇文章内容包括基础知识(GAC.程序集强签名.友元程序集).编译过程.注册GAC.添加工具箱.多语言支持.运行时和设计时调试 源码地址 链接:http://pan.baidu.com/s/1eQm1 ...
- VS2010-安装包制作过程图解
最近做了winform相关程序,开始总结制作安装包过程. 1.首先在打开 VS2010 =>新建=>项目 2.创建一个安装项目 Setup1 在“目标计算机上的文件系统”下我们看见 ...
- DevExpress源码编译总结
独家提供完整可编译sln文件,本篇文章内容包括基础知识(GAC.程序集强签名.友元程序集).编译过程.注册GAC.添加工具箱.多语言支持.运行时和设计时调试 源码地址 链接:http://pan.b ...
随机推荐
- [SoapUI] 从Map里面不想要的键值对
def keysToRemoveForBoss = ["RequestIdBmk", "RequestIdTest"] def extraInfoMapForB ...
- IOS代码片段
2017-08-03 获取应用程序委托FKAppDelegate* appDelegate = [UIApplication shareApplication].delegate 2017-08-03 ...
- spring security 4.2后出现CouldnotverifytheprovidedCSRFtokenbecauseyoursessionwasnotfound
升级到spring security 4.2后,登录不了,出现下面的错误 WARN DefaultHandlerExceptionResolver:361 - Failed to bind reque ...
- php file_get_contents 使用3法
<?php //GET function http_get($url, $params){ return file_get_contents($url.'?'.http_build_query( ...
- SyntaxError: missing ; before statement
做分页功能,遇到了很坑的事情.前台一直报错:SyntaxError: missing ; before statement 最后发现解决办法是eval("("+s+")& ...
- 【Web】网页字体图标的使用
字体图标介绍 网页中图片有很多优点,但也有很多缺点,会增加文件的大小以及增加http请求.这时候就需要用的字体图标(iconfont).字体图标的优点,可以跟图片一样改变透明度.旋转等,本质上是文字, ...
- TortoiseGit使用笔记
不喜欢敲命令行,或者用惯TortoiseSVN的也可以使用TortoiseGit 1. TortoiseGit安装 安装很简单,默认安装就可以.需要安装以下几个软件: l Git-2.14.3-64- ...
- 实现一套山寨springMVC
重复造轮子没有意义,但是通过现已存在的轮子,模仿着思路去实现一套,还是比较cool的.花了三天,终于深夜搞定!收益都在代码里,我干了,您随意! 一.简单思路 简单介绍: 1.所有的请求交给TyDisp ...
- Ubuntu 16.04 安装 postgresql 9.3
1.Ctrl+Alt+t 打开终端 2.输入:wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo a ...
- java常用设计模式十:模板模式
一.定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 如果上面的话不好理解,请看下面的例子 二.示例 1)定义一个模 ...