如何从自动缩放中排除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
的大小,则会缩放myUserControl
。但是我的孩子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是和否。我同意如果你必须为一堆控件做这件事,那将是一个很大的工作,但是你的问题是关于一个文本框的,所以这就是我关注的全部。这就是危险,提供了一个带有问题的示例。通常我会发布多个示例,这样人们就不会陷入示例中。