-1

カスタムコントロールで動的にいくつかのテキストボックスを作成しています(実際には、実行時に他のサブコントロールを追加するバインディングソースを備えた単なるパネルです。

WordWrap=True大きなテキストを期待しているので、設定しているものもあります。ただし、テキストボックスには1行しかありません。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が、Trueです。

カスタムコントロールでこの奇妙な動作に直面する理由はありますか?

編集:問題は、テキストをワードラップにできないことです。したがって、MultiLineをtrueに、AutoSizeをfalseに、WordWrapをTrueに設定しても、テキストは行を変更していません。スクロールバーを追加したくありません。

4

2 に答える 2

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 に答える
0

みんなお詫びしなければなりません。
エラーは私のxmlにありました(私はMultilineの代わりにMultiLineを持っていました)ので、私のテキストボックスは決してMultilineではありませんでした。お時間をいただきありがとうございます。意味のないご利用をお詫び申し上げます。

于 2012-11-23T09:37:21.883 に答える