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

时间:2011-12-01 19:56:58

标签: winforms user-interface user-controls scaling

我的UserControl包含TextBox

调整父级UserControl后,内部TextBox会小心重新定位。

如果UserControl由于表单的AutoScaling而调整大小,那么我的UserControl会缩放(应该是)。但是我的孩子TextBox从我的身下调整了大小。

如何让我所拥有的TextBox将自己排除在缩放之外?

这种机制的工作原理是我不能“事后修补”;这是幸运的,因为我不想诉诸这种丑陋的黑客(即我想要正确的解决方案)。


我尝试调用base.ScaleControl

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

但这没效果。

1 个答案:

答案 0 :(得分: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控件,看看是否有效。