-1

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

在其中一些我设置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,但文本并没有换行。我不想添加滚动条。

4

2 回答 2

0

伙计们,我必须道歉。
错误出现在我的 xml 中(我有 MultiLine 而不是 Multiline),所以我的文本框从来都不是 Multiline。感谢您的宝贵时间,很抱歉无意义地花费了它。

于 2012-11-23T09:37:21.883 回答
0

您可以在 .Text 更改时调整 TextBox 的 .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
于 2012-11-22T20:32:07.450 回答