在运行时vb.net期间编辑多行文本框时出现问题

时间:2011-05-01 08:03:29

标签: vb.net text combobox system.drawing

我是一名没有太多vb.net经验的大学生,需要一些个人项目的帮助。我试图增加多行文本框控件的高度,以便我可以在运行时插入多行。点击Enter后,我想在文本框中找到一个新行。此外,我同时尝试在按Enter键创建的每个文本框行旁边生成一个组合框。这是我到目前为止的代码:

Private Sub ThisTextBox_keypress(ByVal sender As System.Object, ByVal e As KeyPressEventArgs) Handles ThisTextBox.KeyPress

    Dim TextboxLine As String() = ThisTextBox.Text.Split(vbNewLine)
    Dim Linecount As Integer = TextboxLine.Count
    If e.KeyChar = Chr(Keys.Enter) Then
       Me.ThisTextBox.Height = TextRenderer.MeasureText(" ", Me.ThisTextBox.Font).Height * _ Linecount 
       For Each Item In TextboxLine
            Dim newCombobox = New ComboBox()
            Me.Controls.Add(newCombobox)
            newCombobox.Items.Insert(0, "Item 1")
            newCombobox.Items.Insert(1, "Item 2")
            newCombobox.Items.Insert(2, "Item 3")
            newCombobox.Items.Insert(3, "Item 4")

            newCombobox.Location = New System.Drawing.Point(108, 69+=27)
            newCombobox.Size = New System.Drawing.Size(92, 21)

        Next
    End If


End Sub

问题是文本框会随着我输入的每个字符增加其高度,当我按Enter键时,控件高度会以奇怪的增量增加,这与文本字体*行数无关。此外,我的代码可能在运行时如何创建组合框并将其设置为特定位置,但希望您能够看到我想要做的事情。提前谢谢。

1 个答案:

答案 0 :(得分:1)

有趣的问题。

以下代码几乎可以达到您想要的效果,但是在每个文本行旁边放置一个组合框会导致问题,因为没有足够的空间来使组合框足够高。

Private Sub ThisTextBox_keypress(ByVal sender As System.Object, ByVal e As KeyPressEventArgs) Handles ThisTextBox.KeyPress
    Static previousLineCount = 0
    Dim LineCount As Integer = ThisTextBox.Lines.Count
    If LineCount > previousLineCount Then

        Dim lineHeight As Integer = TextRenderer.MeasureText(" ", Me.ThisTextBox.Font).Height
        ThisTextBox.Height = lineHeight * LineCount + 10
        For Each Item In ThisTextBox.Lines
            Dim newCombobox = New ComboBox()
            Me.Controls.Add(newCombobox)
            newCombobox.Items.Insert(0, "Item 1")
            newCombobox.Items.Insert(1, "Item 2")
            newCombobox.Items.Insert(2, "Item 3")
            newCombobox.Items.Insert(3, "Item 4")

            newCombobox.Location = New System.Drawing.Point(ThisTextBox.Left + ThisTextBox.Width, ThisTextBox.Top + (LineCount) * lineHeight - 12)
            newCombobox.Size = New System.Drawing.Size(92, lineHeight)

        Next
    End If
End Sub

我不知道如何改变组合框控制的高度(这里的其他人可能知道你是否可以),但无论如何它看起来都会很有趣。

您可能还会考虑使用RichTextBox控件并更改行间距。

希望上面的代码无论如何都能让你入门。