2017-03-27 4 views
0

J'ai une classe qui crée les contrôles:Placer le curseur au début d'un vb.net MaskedTextBox d'une classe séparée

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 

J'ai une forme dynamique qui appelle ces contrôles en utilisant la méthode suivante:

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

Dans la forme elle-même:

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 

Mon problème est que les contrôles créés dynamiquement ne placera pas le curseur au début de MaskedTextBox. J'ai essayé les manières commentées, et elles n'ont pas fonctionné. Sinon, si la zone de texte est pleine, je veux que le curseur se trouve à la fin du texte. Je ne peux pas faire que le curseur fasse quoi que ce soit mais reste là où on clique dessus.

+0

Check this out [lien] (http://stackoverflow.com/questions/1435376/masked-textbox-input-align-left) – 3vts

+1

'txtName.Select (txtName.TextLength, 0)' est probablement ce que vous êtes après. – Bugs

+1

@Bugs: Presque. Cela place le signe à la fin, mais il le veut au début. :) –

Répondre

0

Avec un peu d'aide, voici la réponse finale.

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