在日文操作系统上截断Windows窗体大小

在日文操作系统上截断Windows窗体大小,windows,winforms,forms,Windows,Winforms,Forms,我们有一位日本用户报告说,在他的日本机器上,表单大小被截断(更小,并没有显示所有控件)。 在windows窗体.designer.cs文件中,我们有以下设置: this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 此外,在form-ctor中,我们有一些类似这样的代码,用于将表单大小

我们有一位日本用户报告说,在他的日本机器上,表单大小被截断(更小,并没有显示所有控件)。 在windows窗体.designer.cs文件中,我们有以下设置:

     this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
     this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
此外,在form-ctor中,我们有一些类似这样的代码,用于将表单大小调整为DPI。日本用户的常规DPI设置为96

     //
     // Adjust Form Size from DPIRatio
     //
     var size = this.Size; 
     // dpiRatio is 1.0 if DPI is 96, 
     // dpiRatio is less than 1.0 if DPI higher than 96
     var dpiRatio = DPIHelper.DPIRatio;  
     var newSize = new Size((int)(size.Width/dpiRatio), (int)(size.Height/dpiRatio));
     this.MaximumSize = newSize;
     this.MinimumSize = newSize;
     this.Size = newSize;

我确信它来自于日文视窗上的不同字体,但在网络上找不到任何指导来处理这个问题。有什么想法吗?

是第二段代码把事情搞砸了。东亚机器通常利用XP功能,该功能允许在不增加DPI的情况下增加系统字体大小。很好的可读性,他们复杂的字符


只需删除代码即可解决问题。如果要使表单不可编辑,请将其FormBorderStyle设置为(例如)Fixed3D。如果您坚持伪造边界,则必须将最小/最大大小分配移动到加载事件。只有这样,表单的Size属性才会根据系统字体大小以及任何用户首选项(如边框大小或标题文本大小)进行计算和更正。顺便说一句,哪种模式是代码的另一种故障模式。

是第二个代码片段中的代码弄乱了这一点。东亚机器通常利用XP功能,该功能允许在不增加DPI的情况下增加系统字体大小。很好的可读性,他们复杂的字符


只需删除代码即可解决问题。如果要使表单不可编辑,请将其FormBorderStyle设置为(例如)Fixed3D。如果您坚持伪造边界,则必须将最小/最大大小分配移动到加载事件。只有这样,表单的Size属性才会根据系统字体大小以及任何用户首选项(如边框大小或标题文本大小)进行计算和更正。哪一个btw是代码的另一种故障模式。

Hans,谢谢您的反馈。这个DPI代码在这里是为了一些东西:没有它,表单在DPI设置高于96的Wnd机器上的大小就不好。您对处理高DPI和日本机器有何想法?高DPI也会选择较大的系统字体大小。因此,AutoScaleMode会处理表单大小,使其更大。我不明白你为什么需要它。当您更改DPI设置时,请确保让机器重新启动。Hans,您所写的确实是理论,但在实践中,如果没有此DPI代码,这根本不起作用。我们在hings上遇到了大量的Wnd兼容性问题,理论上应该可以很好地工作,嗯,想出代码来解决这些普遍存在的问题,而把代码弄错也没有什么帮助。你还没有解释为什么它“就是不起作用”。汉斯,实际上你从一开始就是对的。我们有机会在一台日本机器上进行测试,事实上,汉斯,谢谢你的反馈。这个DPI代码在这里是为了一些东西:没有它,表单在DPI设置高于96的Wnd机器上的大小就不好。您对处理高DPI和日本机器有何想法?高DPI也会选择较大的系统字体大小。因此,AutoScaleMode会处理表单大小,使其更大。我不明白你为什么需要它。当您更改DPI设置时,请确保让机器重新启动。Hans,您所写的确实是理论,但在实践中,如果没有此DPI代码,这根本不起作用。我们在hings上遇到了大量的Wnd兼容性问题,理论上应该可以很好地工作,嗯,想出代码来解决这些普遍存在的问题,而把代码弄错也没有什么帮助。你还没有解释为什么它“就是不起作用”。汉斯,实际上你从一开始就是对的。我们有机会在一台日本机器上进行测试,事实上,删除了: