2017-03-27 18 views
0

Iは、コントロールを作成するクラスがある:別のクラスからMaskedTextBoxのvb.netの先頭にカーソルを置く

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 

Iは、以下の方法を使用して、これらのコントロールを呼び出し、動的フォームを有する:

をフォーム自体に
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の先頭に置かれません。私はコメントされた方法を試み、彼らは働かなかった。また、テキストボックスがいっぱいの場合は、テキストの最後にカーソルを置きます。私はカーソルが何かをすることはできませんが、クリックされた場所に留まります。

+0

チェックこのアウト[リンク](http://stackoverflow.com/questions/1435376/masked-textbox-input-align-left) – 3vts

+1

'txtName.Select(txtName.TextLength、0)'おそらくあなたは何をしています。 – Bugs

+1

@Bugs:ほぼ。それは終わりにキャレットを置きますが、彼は最初にそれを望みます。 :) –

答えて

0

いくつかの助けを借りて、ここでは最終的な答えがありました。

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 
関連する問題