将光标放置在单独类中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我尝试了这行代码,但与单击的位置相比,无论是否有文本,光标的位置都没有改变。