【问题标题】:How to exclude a WinForms control from auto-scaling?如何从自动缩放中排除 WinForms 控件?
【发布时间】:2012-01-10 23:02:05
【问题描述】:

我有一个UserControl,其中包含一个TextBox

当我的父 UserControl 调整大小时,内部 TextBox 会仔细调整位置。

如果UserControl 由于表单的自动缩放而被调整大小,那么我的UserControl 将被缩放(应该如此)。但是后来我的孩子TextBox 从我下面调整了大小。

我怎样才能让我拥有的TextBox 将自己排除在缩放之外?

该机制的工作方式使我无法“事后修补”;这是幸运的,因为我不想诉诸如此丑陋的黑客(即我想要正确的解决方案)。


我试过打电话给base.ScaleControl

public partial class MyControl : UserControl
{
   protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
   {
      //base.ScaleControl(factor, specified);
      UpdateTextBoxPosition();
   }
}

但这没有用。

【问题讨论】:

  • 您必须允许它重新缩放,否则它将不适合字体。只需将其放在 OnLoad() 中您想要的位置即可。
  • @HansPassant 我将自己处理字体 - WinForms 无论如何都无法正确处理字体缩放(如果未保留默认字体:它会忽略级联字体更改)。由于容器和TextBox 需要的位置之间的舍入误差,我不能让TextBox 自行缩放。

标签: winforms user-interface user-controls scaling


【解决方案1】:

我认为你是在正确的轨道上,但错误的控制。

尝试继承您自己的 TextBox 以忽略这些更改:

public class UnscaledTextBox : TextBox {

  protected override void OnParentFontChanged(EventArgs e) {
    //base.OnParentFontChanged(e);
  }

  protected override void ScaleControl(SizeF factor, BoundsSpecified specified) {
    //base.ScaleControl(factor, specified);
  }
}

在你的 UserControl 中使用UnscaledTextBox 控件,看看是否能解决问题。

【讨论】:

  • 我不能从TextBox继承; TextBox 只是我的UserControl 中的一个控件。
  • @IanBoyd 为什么不能用这个替换 UserControl 中的 TextBox?它们是同一个控件,这个控件只是忽略了来自父级的缩放和字体更改。
  • 我明白你在说什么 - 创建一整套自定义控件,以便它们忽略缩放。 ugh 我希望有更好的方法。
  • @IanBoyd 是也不是。我同意如果你必须为一堆控件做很多工作,但你的问题关于one TextBox,所以这就是我关注的全部。
  • 提供一个问题的例子是危险的。通常我会尝试发布多个示例,这样人们就不会陷入示例中。
猜你喜欢
  • 2015-07-30
  • 1970-01-01
  • 2017-11-24
  • 2013-05-08
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 2021-10-15
相关资源
最近更新 更多