![cover](https://img-home.csdnimg.cn/images/20230308043928.png)
VS2022 WinForm自动缩放
显示器缩放比例已设置为125%。 使用100%缩放比例重新启动VS;用户控件(Windows 窗体)无法跟WinForm同时启动运行,不能测试;WinForm删除 XXX.cs 中的代码后 XXX.cs[设计] 报错。
文章目录
在两个显示器上,开发Windows窗体应用时,出现了警告和一些问题。
控件:button,label,tablecontrol等。模块:控件及其代码组成的功能组件。
操作的经验
1 主显示器缩放比例已设置为125%。 使用100%缩放比例重新启动VS。
两个显示器开发Windows窗体应用时,出现警告:主显示器缩放比例已设置为125%。 使用100%缩放比例重新启动VS。
这种情况影响反应窗体的响应速度,如何设置为默认100%?参考官方文档。
从 Visual Studio菜单栏中选择“工具”>“命令行”>“开发人员命令提示”,然后输入
devenv /noScale
。自动重启即无缩放。
此时仍然有警告缩放未打开通知。关闭通知方法:选择“工具”>“选项”,选择“Windows 窗体设计器”>“常规”,然后将“DPI 缩放通知”设置为“False”。
2 用户控件(Windows 窗体)时,无法试运行
直接运行Form1.cs,是不能使添加的**用户控件(Windows 窗体)**参与运行的。
解决方法参考官方文档。
在 VS 中创建项目:Windows 窗体控件库(.NET Framework),然后将控件添加到设计图面中,装配一个模块(如果有已经制作好的模块,直接拷贝进去,可能需要解决依赖关系,4中就有例子)。
设置为启动项目,按 F5 生成项目并运行。最上方可以看到当前运行的模块。如果有多个,你也可以选中要测试的那个。
3 删除 XXX.cs 中的代码后 XXX.cs[设计] 报错
删除按钮单击绑定的事件函数后,VS2022报错:设计器无法处理第 58 行的未知名称“[控件名]_[事件函数]”。方法“InitializeComponent”中的代码由设计器生成,不应手动修改。请取消任何更改,然后尝试重新打开设计器。
参考这个CSDN博文。
如果你想删除这个函数,右上角点击转到代码,会进入
XXX.Designer.cs
,删除出错的指定行即可。
这是正确的,但同时这是补救的方法。
正确的顺序是,右击对应的控件选择属性-选择上方事件(闪电箭头)-下拉找到事件以及绑定的动作函数名-删除该函数名,即可解除绑定。然后再删除事件函数。
4 WinForm使用拷贝代码 出错
在测试某项目中的部分模块时,需要将这些模块拷贝到2中创建的项目中,简单的项目没事,已有的稍大的项目就报错了。
首先是设计器报错:
设计器展示界面时报错: 未能找到类型或命名空间名“【某控件名】”(是否缺少 using 指令或程序集引用?)
解决方法:
在拷贝项目时,需要看文件的依赖关系。我的设计器报错,提示XXX.Designer.cs中有错,是因为组件不全。
经过排查,原因是在引用中,有部分dll组件未引入,加入即可。(先右击原项目中未加入组件的属性,拷贝路径,再右击新项目的组件,在路径中选中缺少的那些组件)。
然后是设计器的代码报错。XXX.cs代码中报错:
未能找到类型或命名空间名“ManagementObjectSearcher”(是否缺少 using 指令或程序集引用?)
解决方法:如果为了不改动原项目的情况下测试,那么首先需要添加原项目中的某些文件,根据缺少的类型进行排查。
然后,文件全了,但是仍然显示有部分类型未using?
如
using System.Management;
已经有了,但是仍然报错。
解决方法:这是因为项目中的头文件未生效。右键代码-使用using建议即可。
需要注意的是,一个项目中一般不多次引入,为了不改动原项目代码,你要在原项目中查到,是在哪个文件中引入的,就在哪个文件中使用右键-建议。这样做不仅可以解决报错的问题,还不会引入额外的代码:只是前面灰色的using System.Management;
变成了蓝色。
当前文件夹下的配置文件.ini无法访问
将.ini文件放在当前项目文件夹下,使用path = ".\\set.ini"
无法访问到数据。
改为:
public static string IniFileName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\set.ini"
实际访问到了.\obj\Debug\set.ini
下。即:获取的是obj
目录。参考博客园文章。
改为:
public static string IniFileName = Application.StartupPath + "\\set.ini"
实际访问到了D:\VisualStudio\IDE\Common7\IDE\set.ini
下。即:应用程序IDE的路径。
改为:
public static string IniFileName = System.AppDomain.CurrentDomain.BaseDirectory + "\\set.ini"; //INI配置文件名
或
public static string IniFileName = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\set.ini"; //INI配置文件名
实际访问到了D:\VisualStudio\IDE\Common7\IDE\\set.ini
下。即:应用程序IDE的路径。注意是\\
。
改为:
public static string IniFileName = System.Environment.CurrentDirectory + "\\set.ini"; //INI配置文件名
或
public static string IniFileName = System.IO.Directory.GetCurrentDirectory()+ "\\set.ini"; //INI配置文件名
实际访问到了.\bin\Debug\set.ini
下。即:进程启动的bin
目录。
改为:
public static string IniFileName = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName + "\\set.ini"; //INI配置文件名
或
public static string IniFileName = System.Windows.Forms.Application.ExecutablePath + "\\set.ini"; //INI配置文件名
实际访问到了D:\VisualStudio\IDE\Common7\IDE\UserControlTestContainer.exe\set.ini
下。即:进程启动的bin
目录。
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)