3

我在尝试将文本框锚定到所有 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

4 回答 4

3

你的Form本地化了吗?检查资源文件中的条目Textbox.Size,删除是并重置大小。
你是Form继承的并且是Textbox在baseform上的吗?尝试将Textbox' 访问修饰符设置为 Protected 或 Public。
您是否实现了自定义调整大小逻辑?关闭它,看看问题是否仍然存在。
你输入了Textbox.MinimumSize/MaximumSize吗?删除或更改值。

也可能是这些东西的结合...

于 2008-11-25T20:34:31.683 回答
2

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

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

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

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

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

于 2008-11-25T20:16:56.570 回答
2

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

于 2009-01-27T20:07:54.270 回答
2

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

于 2009-04-22T23:33:31.533 回答