2008-11-25 23 views
3

我遇到了一个问题,试图将文本框固定到窗体的所有4边。我向表单添加了一个文本框,并将Multiline属性设置为True,将Anchor属性设置为Left,Right,Up和Down,以便文本框在运行时随窗体一起展开和缩小。我在文本框的上下还有其他几个控件。固定在所有4边的窗体上的文本框不能正确显示

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

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

谢谢!

UPDATE:

下面是一些设计师的代码按格雷格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 

其他更新:

我最初发布的文本框没有从基类窗体继承(虽然它被添加到自定义用户控件类;我可能应该早些提到过),但我最近遇到了同样的问题完全没有关系d从基类窗体继承的控件集合。将这些问题归咎于.NET框架中可能存在的错误很容易,但它真的开始对我来说是这样。

回答

2

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

+0

我自己今天经历了这个问题与一个`ListBox`。我试图从项目中删除它,并重新添加它,但这并没有解决问题。最后,我用`TextBox`替换了`ListBox`(看起来像是一个bug) – 2012-03-01 17:03:34

2

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

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

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

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

您的程序是否包含任何自定义调整大小逻辑,或者它是否以编程方式修改设计器生成代码之外的文本框大小?这可能也会导致怪异的行为。我假设在我的组织中维护了大量的软件,原来的开发人员花了很多时间来实现(错误的)调整逻辑大小,我必须将其拆分,这样我才能让设计器生成的代码执行为我工作。

+0

我已经设置了高度,但不是最小/最大高度。我删除了文本框,并以不同的名称重新添加它,所以我不认为有任何自定义大小调整代码。将在一些... – Patrick 2008-11-25 20:33:44

3

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

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

2

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