固定到所有4面上的表单的文本框未正确显示

时间:2008-11-25 19:45:26

标签: visual-studio-2005 user-controls .net-2.0 textbox anchor

我在尝试将文本框锚定到所有4个方面的表单时遇到了问题。我在表单中添加了一个文本框,并将Multiline属性设置为True,将Anchor属性设置为Left,Right,Up和Down,以便文本框在运行时随表单一起展开和缩小。我还在文本框的上方和下方有一些其他控件。

锚定在Visual Studio 2005中正常工作(即我可以调整窗体大小并让控件按预期扩展和缩小),但是当我运行项目时,文本框的底部会扩展到窗体的底部,通常出现在其下方的其他控件后面。在尝试调整大小之前加载表单时会发生此问题。文本框的锚定对于顶部,左侧和右侧是正确的;只有底部出现故障。

有没有人听说过这个,如果有,你能找到解决办法吗?

谢谢!

更新:

根据Greg D的要求,这里有一些设计师代码(我只包括与文本框本身有关的内容,而不是其他控件):

Friend WithEvents txtRecommendationText1 As System.Windows.Forms.TextBox

<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
    Me.txtRecommendationText1 = New System.Windows.Forms.TextBox

    ' ...snip...

    'txtRecommendationText1

    Me.txtRecommendationText1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
                Or System.Windows.Forms.AnchorStyles.Left) _
                Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
    Me.txtRecommendationText1.Location = New System.Drawing.Point(4, 127)
    Me.txtRecommendationText1.Multiline = True
    Me.txtRecommendationText1.Name = "txtRecommendationText1"
    Me.txtRecommendationText1.Size = New System.Drawing.Size(223, 149)
    Me.txtRecommendationText1.TabIndex = 10
End Sub

另一个更新:

我最初发布的文本框不是从基类表单继承而来的(虽然它被添加到自定义的用户控件类中;我可能应该在之前提到过),但是我最近在一个完全不相关的集合上遇到了同样的问题从基类表单继承的控件。很容易将这些问题归咎于.NET框架中可能出现的错误,但它真的开始向我展示这种方式。

4 个答案:

答案 0 :(得分:3)

您的Form是否已本地化?检查资源文件以查找包含Textbox.Size的条目,删除并重置大小 您的Form是否继承并且是基础形式上的Textbox?尝试将Textbox的访问修饰符设置为“受保护”或“公共” 您是否实现了自定义调整大小逻辑?关掉它,看看问题是否仍然存在。
您输入了Textbox.MinimumSize / MaximumSize吗?删除或更改值。

它也可能是这些东西的组合......

答案 1 :(得分:2)

在您初始化奇怪之后调整大小时,表单是否会快速恢复到预期的布局?另外,您是否为文本框设置了Height或MinimumHeight / MaximumHeight属性?

如果可能,设计人员代码中的一些代码段可能会有用。 :)

我过去遇到的一种可能性是DPI。如果您在具有与您正在开发的机器不同的DPI设置的机器上运行/测试代码,您可能会发现一些奇怪的事情。

锚点功能实质上建立了控件边缘与控件父级边缘之间的固定距离。您的文本框是否嵌入到另一个没有正确设置锚点的控件(例如面板)中?右键单击设计器中的文本框,会弹出一个菜单,让您可以选择其下面的任何控件。

您的程序是否包含任何自定义调整大小逻辑,还是在设计器生成的代码之外以编程方式修改文本框的大小?这也可能导致奇怪的行为。我假设在我的组织中维护了许多软件,原始开发人员花费了大量时间来实现(错误)调整逻辑,我不得不撕掉它,这样我就可以让设计器生成的代码执行为我工作。

答案 2 :(得分:2)

我最初发布的文本框不是从基类表单继承而来的(虽然它被添加到自定义的用户控件类中;我可能应该在之前提到过),但是我最近在一个完全不相关的集合上遇到了同样的问题从基类表单继承的控件。很容易将这些问题归咎于.NET框架中可能存在的错误,但它真的开始向我展示。

答案 3 :(得分:2)

很可能是因为在InitializeComponent()中设置了'AutoScaleMode'属性。尝试将其设置为“无”,看看是否修复了它。我现在已经遇到过这些问题了几次。