【问题标题】:Make richtextbox single line only只制作richtextbox单行
【发布时间】:2018-04-12 23:52:14
【问题描述】:

是否可以制作一个只能包含一行的富文本框?我希望它具有 wraptext 功能,但我不能在它将生成的文件中包含多行。

【问题讨论】:

标签: vb.net winforms richtextbox


【解决方案1】:

您可以将其 AcceptsReturn 属性设置为 false ,这应该只允许一行,因为它不会让文本返回。

如果由于某种原因您的属性窗口没有 AcceptsReturn 属性,您可以在事件KeyDown 下添加if e.KeyCode = Keys.Enter Then e.SuppressKeyPress = True(如Jimi 所建议的那样)。

【讨论】:

  • 我无法在代码或属性编辑器中找到 RichTextBox 元素的 AcceptsReturn 属性...我缺少什么吗?
  • @BrendenMcFarling,你说的是“元素”。这是否意味着这是 WPF?请确保始终添加所有相关标签。除非您另有说明,否则人们几乎总是会使用 Windows 窗体。
  • @Brenden McFarling 好吧,您可以拦截 KeyDown 事件和if e.KeyCode = Keys.Enter Then e.SuppressKeyPress = True。或者你可以修改RichTextBox Style Rich Edit Control Styles (ES_WANTRETURN) 和AcceptsReturn = False 一样的效果。或者使用这些选项之一创建扩展方法。
  • 我确实认为这是 WCF。应该可以按我说的设置吧?
  • @jmcilhinney 抱歉,我想我忘了“元素”是指特定的东西,我只是习惯于说它是为了尊重,呃,一般的项目。这是一个 Windows 窗体项目。
【解决方案2】:

先想想,我们如何进入下一行?通过按ReturnEnter。所以,在RichTextboxKeyPress 事件中,您可以简单地使用:

 If e.KeyChar = Keys.Return Then
    e.Handled = True
 End if

现在这有一个主要缺点,那就是:如果用户复制粘贴多行文本到 richtextbox 怎么办?

要解决此问题,您只需在 TextChanged 事件中应用以下代码:

 Private Sub Rtb_TextChanged()
  Dim lcount as Integer = rtb.Lines.Count
  Dim i As Integer
  If lcount > 1 Then 
    For i = 2 to lcount - 1
     Dim index As Integer = rtb.GetFirstCharIndexFromLine(i)
     Dim count As Integer = rtb.GetFirstCharIndexFromLine(i + 1) - start_index
     rtb.Text = rtb.Text.Remove(index, count)
    Next
   End if
  End Sub

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多