【问题标题】:Placing the cursor at the beginning of a MaskedTextBox vb.net from a separate class将光标放在来自单独类的 MaskedTextBox vb.net 的开头
【发布时间】:2017-08-20 10:00:43
【问题描述】:

我有一个创建控件的类:

Overrides Sub createControls()
    _GlobalCounter = 0
    Dim lblName As New Label
    lblName.Text = "Store Name"
    Dim txtName As New MaskedTextBox
    txtName.Mask = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    txtName.Text = name
    addControl(lblName, txtName)
    '  txtName.SelectionStart = txtName.Text.Length()
    '  txtName.SelectionLength = 0
    '  txtName.SelectionStart = 0
    '  txtName.SelectionLength = 0

        addEntityControls()
End Sub

我有一个动态表单,它使用以下方法调用这些控件:

 Public Function returnEditorControls() As Control()
        createControls()
        Return _Controls
    End Function

在表单本身中:

Public Sub loadEditor()
    Dim controlCount As Integer = 0
    createControls()
    tlpMain.Controls.Clear()
    tlpMain.ColumnStyles.Clear()
    tlpMain.RowStyles.Clear()
    tlpMain.ColumnCount = _ColumnCount
    Dim intControls As Integer = myControls.Length()
    Dim intTotalRows As Integer = intControls / _ColumnCount
    If (intControls Mod _ColumnCount) > 0 Then
        intTotalRows += 1
    End If
    tlpMain.RowCount = intTotalRows
    For row = 0 To intTotalRows - 1
        tlpMain.RowStyles.Add(New RowStyle(SizeType.Percent, 100 / tlpMain.RowCount()))
        For column = 0 To _ColumnCount - 1
            If controlCount < intControls Then
                tlpMain.Controls.Add(myControls(controlCount), column, row)
                controlCount += 1
            End If
        Next
    Next
End Sub

我的问题是动态创建的控件不会将光标放在 MaskedTextBox 的开头。我尝试了注释掉的方式,但它们没有用。或者,如果文本框已满,我希望光标位于文本末尾。我不能让光标做任何事情,只能停留在被点击的地方。

【问题讨论】:

  • 看看这个link
  • txtName.Select(txtName.TextLength, 0) 可能是您所追求的。
  • @Bugs:差不多。这将插入符号放在最后,但他想要它在开头。 :)
  • @VisualVincent 我是这么想的,但这一点让我着迷。 如果文本框已满,我希望光标位于文本的末尾 所以我想我会评论一下,OP 可以适应 :)
  • @Bugs 我尝试了这行代码,但与单击的位置相比,它并没有改变光标的位置,不管有没有文本。

标签: vb.net dynamic controls maskedtextbox


【解决方案1】:

在一些帮助下,这是最终的答案。

  Public Function returnEditorControls() As Control()
        createControls()
        For Each mtb As MaskedTextBox In _Controls.OfType(Of MaskedTextBox)
            AddHandler mtb.Click, AddressOf fixMTBCursor
        Next
        Return _Controls
    End Function

Public Sub fixMTBCursor(sender As Object, e As EventArgs)
    If TypeOf sender Is MaskedTextBox Then
        Dim txt As MaskedTextBox = DirectCast(sender, MaskedTextBox)
        If txt.SelectionStart > txt.Text.Length Then
            txt.Select(txt.Text.Length, 0)
        End If
    End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多