【问题标题】:VB How to Limit Line number of RichTextBoxVB如何限制RichTextBox的行数
【发布时间】:2015-06-25 21:31:56
【问题描述】:

我对 RichTextBox 有一些问题。我必须根据所需字符数限制 RTB 的大小(高度为 10,宽度为 10)。我尝试使用 maxLength 属性来限制行数。我的意思是我可以限制行数长度10 如果我将最大长度定义为 100,则只能有 10 行。没有回车键一切正常。但是当我按下回车键时,它不会计算当前行的其余部分。如果我在一行的第 6 个字符之后按下回车键,它会跳到下一行。并将上一行计为 6。因此框向下变长。在此先感谢...我的代码如下。

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyDown
    'Here im trying to count character number of each line

    Dim count As Integer = 0
    For Each s As String In Me.RichTextBox1.Lines
        count = count + 1
        MsgBox(count)

        Dim nextLineText As String = s

        If e.KeyCode = Keys.Enter Then
            If count < (TakeFromCombo(ComboBox1)) Then
                RichTextBox1.MaxLength = RichTextBox1.MaxLength - (TakeFromCombo(ComboBox1) - nextLineText.Length)
            End If
        End If

        'I tried to disable enter key at last line
        If count = TakeFromCombo(ComboBox1) Then
            If e.KeyCode = Keys.Enter Then
                e.Handled = True
            End If
        End If
    Next

End Sub

【问题讨论】:

  • TextChanged 事件中测试RTB 的Lines.GetUpperBound(0) 怎么样?
  • 感谢您的回复。我可以达到行数。这不是问题。问题是我无法设置输入键的最大行号原因。
  • 显然 MaxLength 属性完全没用。所以不要使用它。您必须使用 KeyPress 事件进行监视。或者只是假设用户不是 idjut 并使用 Validating 事件验证数据输入。这还可以帮助您处理诸如用户从剪贴板粘贴文本等极端情况。
  • 是的,它完全没用。但我是银行的实习生,所以我必须像白痴一样写。

标签: vb.net richtextbox


【解决方案1】:

这个怎么样? (其中 rtb1 是您的 RichTextBox):

Private Sub rtb1_KeyDown(sender As Object, e As KeyEventArgs) Handles rtb1.KeyDown
    If rtb1.Text.Length > 0 Then
        If rtb1.Lines.Count = 11 Then
            e.SuppressKeyPress = True
        End If
        If rtb1.Lines(rtb1.GetLineFromCharIndex(rtb1.GetFirstCharIndexOfCurrentLine)).Length > 9 And e.KeyCode <> Keys.Return Then
            e.SuppressKeyPress = True
        End If
    End If
End Sub

处理这种情况的工具有点粗糙。 GetFirstCharIndexOfCurrentLine 返回整个 RTB 文本字符串中的字符索引。 GetLineFromCharIndex(i) 获取包含 i 的文本行的索引。 Lines() 返回一个包含所有行的数组(这只是 RTB 的文本,在回车上拆分,Lines(i) 与任何数组一样,返回该索引处的数组成员(使用前面描述的两个RTB 方法)。

【讨论】:

  • 感谢您的回复。但我无法理解第三个如果。我添加了代码。
  • 条件是:如果 currentLineLength > 9 并且用户没有直接点击返回。它在您的代码中有效吗?
  • 我刚刚添加了对该行的一些详细解释。
  • 另外,Lines.Count 应该 = 11,而不是我第一次写的 10。
  • 实际上我在输入按钮时遇到了麻烦 :) 而且它必须只在最后一行禁用以避免超过行号。因为我必须保留 RTB 的所有其他属性。
猜你喜欢
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多