Vb.net 如果文本框是动态添加的,为什么文本框上的WordWrap和AutoSize属性的行为会有所不同?

Vb.net 如果文本框是动态添加的,为什么文本框上的WordWrap和AutoSize属性的行为会有所不同?,vb.net,Vb.net,我正在一个自定义控件中动态创建一些文本框(实际上只是一个带有绑定源的面板,在运行时添加其他子控件) 在某些情况下,我设置WordWrap=True,因为我需要大文本。但是文本框只有一行。此外,我注意到我必须将属性AutoSize设置为False。当我在表单中动态添加文本框时,一切正常(即使没有设置AutoSize和WordWrap) Dim txt as new textbox txt.Multiline = True txt.AutoSize = False txt.Size = Ne

我正在一个自定义控件中动态创建一些文本框(实际上只是一个带有绑定源的面板,在运行时添加其他子控件)

在某些情况下,我设置
WordWrap=True
,因为我需要大文本。但是文本框只有一行。此外,我注意到我必须将属性
AutoSize
设置为False。当我在表单中动态添加文本框时,一切正常(即使没有设置AutoSize和WordWrap)

 Dim txt as new textbox
 txt.Multiline = True
 txt.AutoSize = False
 txt.Size = New Size(100, 50)
 txt.WordWrap = True
 txt.Location = New Point(10, 10)
 Me.Controls.Add(txt)   'Me is my custom Control
在插入文本框后(双击),我检查了文本框的属性
WordWrap
,结果是真的

你知道我为什么要在自定义控件中面对这种奇怪的行为吗

编辑:
问题是我无法将文本设置为换行。因此,尽管我将MultiLine设置为true,AutoSize设置为false,wordwrap设置为true,但文本不会更改行。我不想添加滚动条。

当文本框的.text更改时,您可以调整文本框的.Height:

Public Class Form1

    Dim txt As TextBox

    Sub maketb()
        txt = New TextBox
        txt.Multiline = True
        txt.Size = New Size(100, 50)
        txt.WordWrap = True
        txt.Location = New Point(10, 10)
        Me.Controls.Add(txt)
    End Sub

    Sub SetHeight(sender As Object, e As EventArgs)
        Dim target = DirectCast(sender, TextBox)
        Dim fn = target.Font
        Dim gr = target.CreateGraphics()
        Dim lrMarginSize = target.Margin.Left + target.Margin.Right
        Dim tbMarginSize = target.Margin.Top + target.Margin.Bottom
        Dim h = gr.MeasureString(target.Text, fn, target.Width - lrMarginSize).Height + tbMarginSize
        target.Height = CInt(Math.Ceiling(h))
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        maketb()
        AddHandler txt.TextChanged, AddressOf SetHeight
        txt.Text = "dfgd dfd gg hgljhhkjlh jhkkj hkjh hghjg hgjhgz hfjsdhfytu hgjahg ht gretyt jgagury agha gty ajhg ajgx"
    End Sub

End Class

伙计们,我必须道歉。
错误在我的xml中(我有多行而不是多行),所以我的文本框从来都不是多行的。
感谢您的时间,抱歉没有意义地花费了它。

您能解释一下为什么您觉得这种行为“奇怪”吗?@Steve:我已经编辑了标题以澄清。您是否已将多行属性启用为true?@Steve:因为将其添加到自定义控件时的行为与将其添加到表单时的行为不同,所以我发现它很奇怪。您不觉得奇怪吗ou?也许我不得不将我的问题重新表述为如何将文本框设置为WordWrap。@djadmin:正如您在我的代码中所看到的,是的,我已经这样做了。谢谢您的回答。我不想玩高度,因为我动态添加了太多控件,这会使UI的排序复杂化。我还注意到您将文本框添加到表单中。我没有遇到任何问题。我有一个自定义控件(一个用xml提供的面板(有我的控件定义)),它创建控件。有些控件是文本框,我希望它们是多行的,没有滚动条和wordWrap。这种情况下wordWrap不起作用