scalemode属性 html,更改默认字体的AutoScaleMode问题

当使用非默认字体时,我有一些Form.AutoScaleMode属性和固定大小控件的问题。我把它归结为一个简单的测试应用程序(WinForms 2.0),只有一个表单,一些固定大小的控件和以下属性:

class Form1 : Form

{

// ...

private void InitializeComponent()

{

// ...

this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;

this.Font = new System.Drawing.Font("Tahoma", 9.25F);

// ...

}

}

在96dpi,Windows XP下,表单看起来像这个96 dpi示例:

在120 dpi,Windows XP下,Windows窗体自动缩放功能产生了这个120 dpi的示例:

如您所见,组框,按钮,列表或树视图正确缩放,多行文本框在垂直轴上变得太大,并且固定大小的标签在垂直和水平方向上都无法正确缩放。似乎是.NET框架中的错误?

编辑:一些提示:字体更改仅应用于包含表单,控件从表单继承其字体。如果可能的话,我想保持这种方式。

使用默认字体(Microsoft Sans Serif 8.25pt),不会发生此问题。当然,使用AutoScaleMode = Font(当然具有足够的AutoScaleDimensions)要么根本不进行缩放,要么完全如上所示进行缩放,具体取决于设置Font的时间(在更改AutoScaleMode之前或之后)。问题不是特定于“Tahoma”字体,它也出现在Microsoft Sans Serif,9.25pt。

是的,我已经阅读了这篇SO帖子

高DPI问题

但它并没有真正帮助我。

有什么建议如何解决这个问题?

编辑2:关于我的意图的一些额外信息:我有大约50个已经工作的固定大小对话框,有几百个正确放置的固定大小控件。它们从较旧的C ++ GUI框架迁移到C#/ Winforms,这就是它们都是固定大小的原因。所有这些都使用9.25pt字体,96 dpi看起来很好。在旧框架下,缩放到120 dpi工作正常 - 所有固定大小的控件在两个维度上缩放相等。上周,我们在切换到120 dpi时在WinForms下检测到这种奇怪的缩放行为。你可以想象我们的大多数对话现在在120 dpi下看起来非常糟糕。我正在寻找一种解决方案,避免完全重新设计所有这些对话框。

编辑3:为了测试这种行为,恕我直言,建立一个120 dpi的虚拟Windows XP环境是一个好主意,而开发环境只有96 dpi(至少,这就是我所做的)。在96和120 dpi之间切换通常需要在Win XP下重启,否则你看不到真正发生的事情。

// As requested: the source code of Form1.cs

namespace DpiChangeTest

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

Font f = this.textBox1.Font;

}

}

}

// here the source of Form1.Designer.cs:

namespace DpiChangeTest

{

partial class Form1

{

private System.ComponentModel.IContainer components = null;

protected override void Dispose(bool disposing)

{

if (disposing && (components != null))

{

components.Dispose();

}

base.Dispose(disposing);

}

#region Windows Forms Designer generated code

private void InitializeComponent()

{

System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("A list view control");

System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("A TreeView control");

this.button1 = new System.Windows.Forms.Button();

this.groupBox1 = new System.Windows.Forms.GroupBox();

this.textBox1 = new System.Windows.Forms.TextBox();

this.label1 = new System.Windows.Forms.Label();

this.listView1 = new System.Windows.Forms.ListView();

this.treeView1 = new System.Windows.Forms.TreeView();

this.SuspendLayout();

//

// button1

//

this.button1.Location = new System.Drawing.Point(12, 107);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size(150, 70);

this.button1.TabIndex = 0;

this.button1.Text = "Just a button";

this.button1.UseVisualStyleBackColor = true;

//

// groupBox1

//

this.groupBox1.Location = new System.Drawing.Point(12, 12);

this.groupBox1.Name = "groupBox1";

this.groupBox1.Size = new System.Drawing.Size(150, 70);

this.groupBox1.TabIndex = 1;

this.groupBox1.TabStop = false;

this.groupBox1.Text = "Just a groupbox";

//

// textBox1

//

this.textBox1.Location = new System.Drawing.Point(180, 12);

this.textBox1.Multiline = true;

this.textBox1.Name = "textBox1";

this.textBox1.Size = new System.Drawing.Size(150, 70);

this.textBox1.TabIndex = 2;

this.textBox1.Text = "A multiline text box";

//

// label1

//

this.label1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

this.label1.Location = new System.Drawing.Point(179, 107);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size(150, 70);

this.label1.TabIndex = 3;

this.label1.Text = "A label with AutoSize=False";

//

// listView1

//

this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {

listViewItem2});

this.listView1.Location = new System.Drawing.Point(12, 201);

this.listView1.Name = "listView1";

this.listView1.Size = new System.Drawing.Size(150, 70);

this.listView1.TabIndex = 4;

this.listView1.UseCompatibleStateImageBehavior = false;

//

// treeView1

//

this.treeView1.Location = new System.Drawing.Point(179, 201);

this.treeView1.Name = "treeView1";

treeNode2.Name = "Knoten0";

treeNode2.Text = "A TreeView control";

this.treeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {

treeNode2});

this.treeView1.Size = new System.Drawing.Size(150, 70);

this.treeView1.TabIndex = 5;

//

// Form1

//

this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;

this.ClientSize = new System.Drawing.Size(343, 289);

this.Controls.Add(this.treeView1);

this.Controls.Add(this.listView1);

this.Controls.Add(this.label1);

this.Controls.Add(this.textBox1);

this.Controls.Add(this.button1);

this.Controls.Add(this.groupBox1);

this.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F);

this.Name = "Form1";

this.Text = "Form1";

this.ResumeLayout(false);

this.PerformLayout();

}

#endregion

private System.Windows.Forms.Button button1;

private System.Windows.Forms.GroupBox groupBox1;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.ListView listView1;

private System.Windows.Forms.TreeView treeView1;

}

}

// and Main.cs

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值