将光标放置在单独类中MaskedTextBox vb.net的开头

将光标放置在单独类中MaskedTextBox vb.net的开头,vb.net,dynamic,controls,maskedtextbox,Vb.net,Dynamic,Controls,Maskedtextbox,我有一个创建控件的类: Overrides Sub createControls() _GlobalCounter = 0 Dim lblName As New Label lblName.Text = "Store Name" Dim txtName As New MaskedTextBox txtName.Mask = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" txtName.Te

我有一个创建控件的类:

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
公共子加载编辑器()
Dim controlCount为整数=0
createControls()
tlpMain.Controls.Clear()
tlpMain.ColumnStyles.Clear()
tlpMain.RowStyles.Clear()
tlpMain.ColumnCount=\u ColumnCount
Dim intControls As Integer=myControls.Length()
Dim INTTOTALLOWS As Integer=intControls/\u ColumnCount
如果(intControls Mod_ColumnCount)>0,则
intTotalRows+=1
如果结束
tlpMain.RowCount=intTotalRows
对于行=0到intTotalRows-1
添加(新的行样式(SizeType.Percent,100/tlpMain.RowCount())
对于列=0到_ColumnCount-1
如果controlCount

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

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

  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

检查一下这个
txtName。选择(txtName.TextLength,0)
可能就是你想要的。@bug:差不多了。这将插入符号放在最后,但他希望它在开头。:)@视觉刺激我这么想,但这一点让我很吃惊。如果文本框已满,我希望光标位于文本的末尾,因此我会对此进行注释,OP可以进行调整:)@Bugs我尝试了这行代码,但与单击的位置相比,无论是否有文本,光标的位置都没有改变。