正如标题中所建议的,我在使用 Windows XP 的机器上的 Visual Express 2010 上创建了一个应用程序(Windows 窗体)。我已经在运行 Windows 7 的机器上测试了该应用程序,并且按钮和控件的格式更改破坏了该应用程序的总体外观。
有什么方法可以阻止我的应用程序在 Windows 7 计算机上运行?
其他替代方法是检查用户使用的是什么操作系统,并根据此更改按钮/控件/等的对齐/位置...
最好的方法是什么?
提前感谢您的回答。
正如标题中所建议的,我在使用 Windows XP 的机器上的 Visual Express 2010 上创建了一个应用程序(Windows 窗体)。我已经在运行 Windows 7 的机器上测试了该应用程序,并且按钮和控件的格式更改破坏了该应用程序的总体外观。
有什么方法可以阻止我的应用程序在 Windows 7 计算机上运行?
其他替代方法是检查用户使用的是什么操作系统,并根据此更改按钮/控件/等的对齐/位置...
最好的方法是什么?
提前感谢您的回答。
您几乎可以肯定地错误地识别了问题的根源。到目前为止,表单布局损坏的最常见原因是视频适配器的 DPI 设置。它决定了每英寸的像素数,在 Windows 7 上很容易更改。在 XP 上也可以更改,只是更难更改。设置很重要,显示器变得越来越好,尤其是在苹果推动“视网膜”显示器的情况下。
通过调整 Program.cs 中的 Main() 方法来添加检查代码。让它看起来像这样:
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var main = new Form1();
using (var gr = main.CreateGraphics()) {
if (gr.DpiX != 96) {
MessageBox.Show("Sorry, didn't get this done yet. Bye");
Environment.Exit(1);
}
}
Application.Run(main);
}
修复表单布局当然是长期解决方案。标准错误是为控件提供与表单的 Font 属性或其容器的不匹配的自己的 Font 属性。在 XP 机器上触发相同问题的一种简单方法是模拟 DPI 设置的作用。省去了在 XP 上查找设置以及更改时必须重新启动机器的麻烦。将此代码粘贴到您的表单中:
protected override void OnLoad(EventArgs e) {
this.Font = new Font(this.Font.FontFamily, this.Font.SizeInPoints * 120f / 96f);
base.OnLoad(e);
}
这相当于在 Win7 显示首选项中选择 125% 缩放。
您可以使用System.Environment.OSVersion,但最好的方法是让您的应用程序在 Windows 7 上运行并正确显示,您真的不想失去拥有 Windows 7 的客户端(尤其是现在最常用的时候)视窗版)
只需检查您的应用程序正在运行的操作系统版本,如果您的程序在 Windows 7 上运行,则退出程序,例如,
if (Environment.OSVersion.ToString().Contains("Microsoft Windows NT 6.1"))
{
//code to execute if running win 7
}