VS2022 WinForm自动缩放

在两个显示器上,开发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目录。

  • 16
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值