2013-08-26 54 views
1

我有一个textboxmultiline设置为true。我想要max characters设置为每行50行共3行。当他们达到50个字符时,我希望它跳到第二行。 我有一些问题,并一直在这方面挣扎了一段时间,并想知道是否有人可以提供帮助。textbox multiline,length issues

MAX_LINE_COUNT = 3 

Private Sub txtMsg_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtMsg.KeyDown 

    If e.KeyCode = Keys.Enter Then 
     e.SuppressKeyPress = (Me.txtMsg.Lines.Length >= MAX_LINE_COUNT) 
    End If 

End Sub 
+0

@Mertis,我更新了我的代码 – user1884032

+0

'Lines'是一个数组,因此您的代码将无法工作,因为您正在检查文本框中的行数,而不是单行中的字符数。 –

+0

所以你能帮助我吗? – user1884032

回答

2

为了有效地处理多行文字,每行一个共同的最多字符,那么你将需要扩展TextBox类并覆盖在TextBox类的几个项目。而不是重新发明轮子,我要你的答案重定向到代码Is there a way to catch maximum length PER LINE and not allow user to input more characters if max length PER LINE has been reached?,因为它是不接受的答案,我将粘贴的VB.NET翻译:

Public Class MaxPerLineTextBox 
    Inherits TextBox 
    Public Sub New() 
    MyBase.Multiline = True 
    End Sub 

    Public Overrides Property Multiline() As Boolean 
    Get 
     Return True 
    End Get 
    Set 
     Throw New InvalidOperationException("Readonly subclass") 
    End Set 
    End Property 

    Public Property MaxPerLine() As System.Nullable(Of Integer) 
    Get 
     Return m_MaxPerLine 
    End Get 
    Set 
     m_MaxPerLine = Value 
    End Set 

    End Property 

    Private m_MaxPerLine As System.Nullable(Of Integer) 

    Protected Overrides Sub OnKeyPress(e As KeyPressEventArgs) 
    If Char.IsControl(e.KeyChar) Then 
     MyBase.OnKeyPress(e) 
     Return 
    End If 

    Dim maxPerLine As Integer 
    If Me.MaxPerLine.HasValue Then 
     maxPerLine = Me.MaxPerLine.Value 
    Else 
     MyBase.OnKeyPress(e) 
     Return 
    End If 

    Dim activeLine As Integer = Me.GetLineFromCharIndex(Me.SelectionStart) 
    Dim lineLength As Integer = Me.SelectionStart - Me.GetFirstCharIndexFromLine(activeLine) 

    If lineLength < maxPerLine Then 
     MyBase.OnKeyPress(e) 
     Return 
    End If 

    e.Handled = True 
    End Sub 
End Class 

要使用您需要执行以下代码:

  1. 在您的解决方案中创建一个新项目以保存上述代码。
  2. 将上面的代码粘贴到新项目中并构建它。
  3. 确保没有错误并且项目成功编译。
  4. MaxPerLineTextBox控件应显示在工具箱中。如果没有,请尝试重新启动Visual Studio。
  5. 将MaxPerLineTextBox拖到窗体上并设置属性。
+0

VB.NET已经改变了很多,因为我使用它一小时前:) – varocarbas

+0

@varocarbas - :-) fixed。 –

+0

@Karl Anderson - 你能帮我把这个放进VB.Net吗? – user1884032