我是一名没有太多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键时,控件高度会以奇怪的增量增加,这与文本字体*行数无关。此外,我的代码可能在运行时如何创建组合框并将其设置为特定位置,但希望您能够看到我想要做的事情。提前谢谢。
答案 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控件并更改行间距。
希望上面的代码无论如何都能让你入门。