dans VB6 Il existe une fonctionnalité appelée tableaux de contrôle, où vous NOMMED contrôle le même nom et leur fournit une valeur d'index. Cela vous permet de définir une valeur en boucle via les commandes et en définissant chaque valeur. Dans VB .NET, je ne peux pas créer de tableau de contrôle pourriez-moi créer une solution similaire. P>
7 Réponses :
avec Winforms, vous pouvez le faire:
myForm.Controls _ .OfType(Of TextBox) _ .OrderBy(Function(c) c.Name) _ .Where(Function(c) c.Name.StartsWith("somePrefix")) _ .ToArray()
Cela ne fonctionne pas s'il y a des conteneurs contenant des contrôles d'intérêt.
Votre formulaire ou panelControl, ou quoi que ce soit d'autre que cela puisse contenir des contrôles d'enfants aurez une propriété appelée Vous pouvez boucler dans toutes les zones de texte dans une commande en utilisant p> 'Créer une liste de textes de texte, comme un tableau mais mieux
Dim MyTextboxControls comme nouvelle liste P> contrôles code>.
For Each uxControl As UserControl in MyFormName.Controls
If TypeOf(uControl) is TextBox Then
Dim tbControl As TextBox = DirectCast(uControl, TextBox)
If tbControl.Name.StartsWith("abc") Then
tbControl.EditValue = "the Value you want to initialize"
End If
End If
Next
Cela ne fonctionne pas s'il y a des conteneurs contenant des contrôles d'intérêt si vous en avez fait allusion.
Évitez d'utiliser les approches d'itération proposées, vous obtiendrez une collection de contrôles assez aléatoires à moins que votre formulaire soit très simple. Déclarez simplement la matrice de contrôle dans votre code et l'initialisez dans le constructeur de formulaire. Comme ceci:
Public Class Form1 Private OrderNumbers() As TextBox Public Sub New() InitializeComponent() OrderNumbers = New TextBox() {TextBox1, TextBox2} End Sub End Class
oui, c'est le problème sans le déclarer explicitement (le hasard)
Cette réponse, associée à la réponse de Dwidel, montre comment faire tout ce que vous pouvez faire avec les tableaux de contrôle de VB6. La réponse de Dwidel montre comment créer et connecter les gestionnaires d'événements, et cette réponse montre comment permettre l'itération logique à travers eux. Joli.
Voici un exemple que j'ai écrit pour autre chose qui montre comment faire quelque chose de similaire et montre comment faire le gestionnaire également. Cela fait une grille de 10x10 de boutons qui tournent en rouge lorsque vous les cliquez.
+1 Parce que vous montrez comment créer des contrôles au moment de l'exécution et associer un gestionnaire d'événements partagé à tous. Ce sont probablement les capacités que les personnes convertissent de VB6 manquent le plus.
Mais ne peut pas remplir complètement. Copier coller dans le formulaire de concepteur ne fonctionne pas. Supposons que je puisse facilement créer un échiquier dans VB6 facilement, mais quand je le fais dans VB.NET, je dois faire beaucoup de copier collé des codes. Ce qui me rend humide. Mais mon habitude était sèche auparavant.
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click Dim a() As Control = GetControls("textbox") For Each c As TextBox In a c.Text = c.Name Next End Sub Private Function GetControls(typeOfControl As String) As Control() Dim allControls As New List(Of Control) 'this loop will get all the controls on the form 'no matter what the level of container nesting 'thanks to jmcilhinney at vbforums Dim ctl As Control = Me.GetNextControl(Me, True) Do Until ctl Is Nothing allControls.Add(ctl) ctl = Me.GetNextControl(ctl, True) Loop 'now return the controls you want Return allControls.OrderBy(Function(c) c.Name). _ Where( _ Function(c) (c.GetType.ToString.ToLower.Contains(typeOfControl.ToLower) AndAlso _ c.Name.Contains("Box")) _ ).ToArray() End Function
C'est donc l'une des fonctionnalités qui n'ont pas effectué la transition vers VB.net - exactement :-( Cependant, vous pouvez accomplir une grande partie de ce que vous auriez fait dans VB6 avec deux mécanismes différents de .NET: en boucle Les événements de contrôle des commandes et de manutention.
boucle à travers la collection de commandes forte>
Dans vb.net, chaque conteneur de formulaire et de contrôle a une collection de commandes. Ceci est une collection que vous pouvez boucler puis effectuer une opération sur la commande, comme définissez la valeur. P> Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox2.TextChanged, TextBox3.TextChanged
Dim myTxt As TextBox = CType(sender, TextBox)
MessageBox.Show(myTxt.Text)
End Sub
Peut-être que c'est plus simple. Pour créer une matrice de contrôle, je mets la déclaration de tableau de contrôle dans un module. Par exemple, si j'ai une forme avec trois textes de texte et que je veux que les boîtes de texte soient faites partie d'une matrice de contrôle appelée «myText», je déclare mon tableau de contrôle dans un module comme suit:
Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load For i As Integer = 0 To 2 mytext(i).Text = i + 1 Next End Sub End Class
Pourriez-vous s'il vous plaît donner un exemple de code?
Son appelé "tableau de contrôle".
Très très utile caractéristique c'était. Je ne sais pas quelle est la raison qui l'enlève!