如何从自动缩放中排除WinForms控件?

如何从自动缩放中排除WinForms控件?,winforms,user-interface,user-controls,scaling,Winforms,User Interface,User Controls,Scaling,我有一个用户控件,其中包含一个文本框 当我的父UserControl调整大小时,内部TextBox会被仔细地重新定位 如果由于表单的自动缩放而调整了UserControl的大小,则会缩放myUserControl。但是我的孩子TextBox从我下面被调整了大小 如何使我拥有的文本框从缩放中排除自身 该机制的工作方式使我无法“事后修补”;这是幸运的,因为我不想求助于这样一个丑陋的黑客(即,我想要正确的解决方案) 我试图不调用base.ScaleControl: public partial cl

我有一个
用户控件
,其中包含一个
文本框

当我的父
UserControl
调整大小时,内部
TextBox
会被仔细地重新定位

如果由于表单的自动缩放而调整了
UserControl
的大小,则会缩放my
UserControl
。但是我的孩子
TextBox
从我下面被调整了大小

如何使我拥有的
文本框
从缩放中排除自身

该机制的工作方式使我无法“事后修补”;这是幸运的,因为我不想求助于这样一个丑陋的黑客(即,我想要正确的解决方案)


我试图不调用
base.ScaleControl

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

但这不起作用。

我认为你的思路是对的,但控制错误

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

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
控件,看看这是否奏效。

我认为您的方法是正确的,但控件是错误的

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

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
控件,看看这是否奏效。

您必须允许它重新缩放,否则它将不适合字体。只需在OnLoad()中将其放在需要的位置即可。@HansPassant我将自己处理字体-WinForms无论如何都无法正确处理字体缩放(如果未保留默认字体:它将忽略层叠字体更改)。我不能让
文本框
自行缩放,因为容器和
文本框
需要的位置之间存在舍入错误。您必须允许它重新缩放,否则它将不适合字体。只需在OnLoad()中将其放在需要的位置即可。@HansPassant我将自己处理字体-WinForms无论如何都无法正确处理字体缩放(如果未保留默认字体:它将忽略层叠字体更改)。我不能让
文本框
自行缩放,因为容器和
文本框
需要的位置之间存在舍入错误。我不能从
文本框
继承;
TextBox
只是我的
UserControl
@IanBoyd中的一个控件为什么不能用这个控件替换UserControl中的TextBox呢?它们是同一个控件,这个控件忽略了来自父控件的缩放和字体更改。我明白你的意思-创建一整套自定义控件,这样它们就可以忽略缩放。呃,我希望有更好的方法。@IanBoyd是和否。我同意如果你必须为一堆控件做这件事,那将是一个很大的工作,但是你的问题是关于一个文本框的,所以这就是我关注的全部。这就是危险,提供了一个带有问题的示例。通常我会尝试发布多个示例,这样人们就不会陷入示例中。我无法从
文本框继承
TextBox
只是我的
UserControl
@IanBoyd中的一个控件为什么不能用这个控件替换UserControl中的TextBox呢?它们是同一个控件,这个控件忽略了来自父控件的缩放和字体更改。我明白你的意思-创建一整套自定义控件,这样它们就可以忽略缩放。呃,我希望有更好的方法。@IanBoyd是和否。我同意如果你必须为一堆控件做这件事,那将是一个很大的工作,但是你的问题是关于一个文本框的,所以这就是我关注的全部。这就是危险,提供了一个带有问题的示例。通常我会发布多个示例,这样人们就不会陷入示例中。