begin process at 2013 05 20 05:59:56
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Control

 > SELECTEUR ALPHANUMERIQUE (VB.NET 2010

SELECTEUR ALPHANUMERIQUE (VB.NET 2010


 Information sur la source

Note :
Aucune note
Catégorie :Control Source .NET ( DotNet ) Classé sous :Selecteur, Alphanumerique, NET Niveau :Débutant Date de création :18/06/2012 Vu / téléchargé :1 930 / 109

Auteur : jemade

Ecrire un message privé
Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Selecteur Alphanumerique. Affiche les Lettres de A à Z et permet d'executer une action, en cliquant sur l'une d'elles.

Source

  • Public Class Form1
  • Dim MesLettres As New Collection
  • '
  • Private Sub ClickMesLettres(ByVal sender As System.Object, ByVal e As System.EventArgs)
  • For i = 1 To MesLettres.Count
  • With MesLettres(i)
  • If .name = sender.name Then
  • .backcolor = Color.LightGreen
  • .forecolor = Color.Red
  • ExecutionSelecteur(i)
  • Else
  • .forecolor = Color.Black
  • .backcolor = Me.BackColor
  • End If
  • End With
  • Next i
  • End Sub
  • Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  • For i As Integer = 0 To 25
  • Dim x As New Label
  • x.Name = "Lettre" & Str(Asc("A") + i)
  • Controls.Add(x)
  • x.Left = 10 + i * 25
  • x.Top = 20
  • x.Width = 20
  • x.Text = Chr(Asc("A") + i)
  • x.Font = New Font("Arial", 12, FontStyle.Bold)
  • x.TextAlign = ContentAlignment.MiddleCenter
  • MesLettres.Add(x)
  • AddHandler x.Click, AddressOf ClickMesLettres
  • Next
  • End Sub
  • Private Sub ExecutionSelecteur(I As Integer)
  • MessageBox.Show("vous avez cliqué sur la case " & Chr(64 + I), "", MessageBoxButtons.OK)
  • 'Placez ici le traitement de chaque bouton
  • 'Exemple :
  • 'Select Case Chr(64 + I)
  • ' Case "A"
  • ' Case "B"
  • ' ' etc...
  • 'End Select
  • End Sub
  • End Class
Public Class Form1
    Dim MesLettres As New Collection
    '
    Private Sub ClickMesLettres(ByVal sender As System.Object, ByVal e As System.EventArgs)
        For i = 1 To MesLettres.Count
            With MesLettres(i)
                If .name = sender.name Then
                    .backcolor = Color.LightGreen
                    .forecolor = Color.Red
                    ExecutionSelecteur(i)
                Else
                    .forecolor = Color.Black
                    .backcolor = Me.BackColor
                End If
            End With
        Next i
    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        For i As Integer = 0 To 25
            Dim x As New Label
            x.Name = "Lettre" & Str(Asc("A") + i)
            Controls.Add(x)
            x.Left = 10 + i * 25
            x.Top = 20
            x.Width = 20
            x.Text = Chr(Asc("A") + i)
            x.Font = New Font("Arial", 12, FontStyle.Bold)
            x.TextAlign = ContentAlignment.MiddleCenter
            MesLettres.Add(x)
            AddHandler x.Click, AddressOf ClickMesLettres
        Next
    End Sub
    Private Sub ExecutionSelecteur(I As Integer)
        MessageBox.Show("vous avez cliqué sur la case " & Chr(64 + I), "", MessageBoxButtons.OK)
        'Placez ici le traitement de chaque bouton
        'Exemple :
        'Select Case Chr(64 + I)
        '    Case "A"
        '    Case "B"
        '        ' etc...
        'End Select

    End Sub
End Class


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) TUTORIAL UTILISATION SQLITE AVEC VISUAL BASIC NET 2010 EXPRE...

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) SOUS CLASSE DE DATATABLE POUR LA MISE À JOUR DE LA BASE DE D... par erdna
Source avec Zip RICHTEXTBOX AVEC ENREGISTREMENT DES COULEURS DE POLICES par bernardluguet
Source avec Zip Source avec une capture PROGRESSBAR GENRE "GLOSS" SANS MANIFEST par jack
Source avec Zip Source avec une capture UTILITAIRE MSR605/206 par PhoenixBytes
Source avec Zip Source avec une capture LE PLUS SIMPLE PROGRESSBAR AU MONDE par m_simohamed

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) CALCULATRICE par m22001111
Source avec Zip Source avec une capture COLOR PICKER par EBArtSoft
Source avec Zip FLEXGRID SAISISSABLE par Abdeloua1
Source avec Zip Source .NET (Dotnet) UPLOAD/ DOWNLOAD FICHIER XML EN HTTP NET COMPACT FRAMEWORK... par angelus101
Source avec Zip Source avec une capture Source .NET (Dotnet) SILVERLIGHT : GÉRER LA SOURIS par Afyn

Commentaires et avis

Commentaire de Adn56 le 18/06/2012 08:10:05

oui d'accord, c'est donc une création dynamique de control.
Astuces et questions :

AddHandler x.Click, AddressOf ClickMesLettres
1- X n'est pas clair, préfère plutôt un style LblChar ou autre.
2- Tu peux préférer x.Mousedown qui te permet de connaitre le bouton cliqué, la molette, parfois c'est utile ;)

ce qui m'amène à te demander pourquoi placer les labels dans une collection ? qu'elle est l'intérêt ?

Merci de ta lecture et bonne prog.


Commentaire de NHenry le 24/06/2012 14:38:09 administrateur CS

Bonjour,

Code simple, mais peut être utile pour créer des contrôles dynamiquement.

En .NET :
- Retires l'import automatique de Microsoft.VisualBasic.
- Actives Option Explicit et Option Strict
- A la place de Collection, utilises plutot List(Of T)

Avec un peu plus de commentaire, ta source serait très utile.

Commentaire de Adn56 le 24/06/2012 19:35:51

salut, Nhenry.
J'ai déja posté des sources qui traite des controls dynamique, à ce propos une prochaine arrive bientôt.
Cependant je ne les place pas dans une collection ou list (of T) car je ne vois pas l'intérêt à part remplir la mémoire (qui est déja bien rempli avec VB.NET ! 25Mo pour une simple form qui place des boutons en dynamique ça mal aux fesses ! En plus elle ne cesse de monter ! il faut minimiser la fenetre pour retrouver une valeur "nomrale" de 1 ou 2M de ram.
Peux tu m'éclairer stp. cdlt ADN
Je commence à me demander si programmer en C++ ou C# ne serait pas plus performant que le VB, ais-je tors ? cela viens t'il du management du .NET ? @ te lire.

Commentaire de NHenry le 24/06/2012 23:20:15 administrateur CS

Faire du C# n'arrangera pas les choses, car c'est le même framework.

L'avantage du List(Of T), c'est que c'est une collection typée, donc au lieu de chercher le label "LblCarA" dans Container.Controls, tu accèdes directement à ce label sans devoir transtyper.

Il y a aussi les Dictionnary(Of ..., ...) si l'index est plus complexe.

Concernant la mémoire, elle est gérée par le GC, Garbage Collector, mais pour qu'il fasse le ménage, il a besoin de stopper le programme, donc, lors de lourds traitements, il ne travaillera pas souvent, pareil, il faut un minimum de mémoire à libérer avant qu'il n'agisse.

Le fait de mettre la fenêtre en réduit, lui donne peut être un signal indirect.

Pour forcer le ménage : GC.Collect (je crois).

Commentaire de Adn56 le 25/06/2012 08:12:44

Merci pour la réponse, en fait ma "vrai" question était plutôt la suivante.
Que vaut il mieux ?
Prendre une zone mémoire pour y placer les contrôles créés ou les rechercher dans le container.controls avec ce code :
For Each ctrl As Control In Controls 'pour chaque control sur la form
            'cache tous les boutons qui n'ont pas le tag toujours visible
            If TypeOf ctrl Is Button AndAlso Not ctrl.Tag Is "tjvisible" Then ctrl.Visible = False

J'arrive à 8Mo aprés minimize de la form, cela devient un peu plus résonable pour laisser le programme tourner en tache de fond.
kenavo

Commentaire de Adn56 le 02/07/2012 20:36:40

bien aprés essais (et sans réponse de ta part - en espérant que tout aille bien pour toi), je poursuis.
1- le CG.collector ne change rien du tout dans une form.load
la seul façon de faire tomber la ram de 22Mo à 9Mo est de :
Me.WindowState = FormWindowState.Minimized
Me.Visible = False
[traitement]
        'affiche la form à la fin pour moins de mémoire (22Mo vs 9Mo !)
        ' GC.Collect() ' ne change rien pfffff
        Me.Visible = True
        Me.WindowState = FormWindowState.Normal

franchement c'est saoulant le .net il doit y avoir mieux non de zeus !!!! ^_^

Commentaire de NHenry le 02/07/2012 20:45:30 administrateur CS

Bonsoir,

Si la consommation mémoire est ta priorité, .NET n'est pas le plus approprié.

Faire une 2ième liste ne coutera pas tellement plus en RAM, car seul les références vers les objets seront faites.
Mais coté performance (vitesse), ce n'en sera que mieux.

Commentaire de Adn56 le 03/07/2012 08:17:05

Bonjour,
je suis d'accord avec toi mais aussi surpris tout de même de voir de "gros" logiciel qui tourne sous .net (solidworks par exemple). Je pense que je ne dois pas bien l'utiliser.
Je vais faire un test comparatif entre l'utilisation des list of t et la recherche direct dans le container.control. Merci de ta lecture. bonne journée.

Commentaire de Adn56 le 07/07/2012 20:14:09

Aprés lecture et travail sur ce code proposé, je dois avertir qu'il est rempli de liaison tardive.
Ex : DAns la sub clikmesletres : If .Name = sender.name Then... léve une erreur par exemple.
placer la balise strict à on pour la voir.
je cherche une façon de faire autre que le cast du sender, qui rendrait utile la list of
De plus le AddHandler n'autorise qu'un object pour le sender, donc je ne vois d'autre solution que le caster en label.
@ suivre donc ;)

Commentaire de NHenry le 07/07/2012 20:26:45 administrateur CS

Bonsoir,

Pour ton problème, il y a 3 manière de "caster" :
- CType : Cast de base, tolère la conversion en Int32 vers énumération par exemple
- DirectCast : Convertit le type uniquement si cela correspond exactement (Label hérite de Control, donc, c'est possible, mais pas de conversion de Int32 vers Enum par exemple). Plus rapide de le CType
- TryCast : Essayes de convertir (avec CType), en cas d'échec, retourne False, True sinon.

Faire avec DirectCast est dans ton cas, je pense conseillé

Ces méthodes sont toujours plus rapides que les liaisons tardives.

Commentaire de Adn56 le 07/07/2012 20:42:07

en effet Henry, mais dans son cas (la source si dessus) je repose donc le cas de la list of label. je m'explique par code.
Si je fais :
' ici avec des boutons pour faire un calendrier (mon prochain dépot de source pour VBfrance)
Private Sub CreerBpMois()
        ' création dynamique des controls BP et des zones de tags.
        ' sur 5 lignes et 7 colones
        For semaines As Integer = 1 To 6

            For jours As Integer = 1 To 7 ' 0=dimanche, 6=samedi et 7=re dimanche
                Dim Bp As New Button
                With Bp
                    .Tag = NomJours(jours) & "_" & semaines.ToString & ":" & (7 * (semaines - 1) + jours).ToString
                    .Size = New Size(60, 24)
                    .Location = New Point((jours - 1) * (.Size.Width + 1), 20 + semaines * (.Size.Height + 1))
                    .Name = ""
                    '.Text = .Tag.ToString 'pour débugage
                    .Visible = False
                    .ImageAlign = ContentAlignment.MiddleLeft
                    .TextImageRelation = TextImageRelation.Overlay
                    .Font = New Drawing.Font("arial", 8)
                    .FlatStyle = FlatStyle.Flat
                    .FlatAppearance.BorderSize = 2
                    .Cursor = Cursors.Hand
                    ' active le menucontextuel "menu1" à chaque bouton
                    .ContextMenuStrip = Menu1
                End With

                ' ajoute les évenements
                'ici l'événement clik "bouton gauche" (attention le choix du bouton cliqué ne se fait que sur mouse.down pas sur click !)
                AddHandler Bp.Click, AddressOf bp_click

                'ajoute ces controls à la form
                Controls.Add(Bp)
                'ajoute ces controls à la liste en mémoire
                listeBpJours.Add(Bp)
            Next
        Next
    End Sub 'création des bp invisibles sur 5 lignes et 7 colones

j'archive les références de ces boutons dans la list of T, ok
mais à quoi peut elle bien servir puisque je suis obligé de caster le sender en bouton !

  Private Sub bp_click(ByVal sender As Object, ByVal e As System.EventArgs)
        For i = 0 To listeBpJours.Count - 1
            With listeBpJours(i)
                If .Name = sender.Name Then
' cette ligne ci dessus léve une liaison tardive !!!!!!!!!!!!!!!!!!!
                End If
            End With
        Next

    End Sub 'clic souris sur un bouton du calendrier actif

Donc si je dois caster autant le faire qu'une fois ! non ?
et donc autant écrire :
  Private Sub bp_click(ByVal sender As Object, ByVal e As System.EventArgs) 'Handles listeBpJours(sender).click
         Dim Ce_Bp As Button = CType(sender, Button) 'cast le sender en bp
       MessageBox.Show(Ce_Bp.Name)
      
End Sub 'clic souris sur un bouton du calendrier actif

Tu vois ou je veux en venir ?
Pourquoi faire une liste des control créer dynamiquement ?
j'ai reussi à passer à bp_click un button au lieu d'un object, mais il me manque le e.sytemEventArgs, grrrrrrr

comme ceci :

    Private Sub bp_click(ByVal sender As Button, ByVal e As System.EventArgs) 'Handles listeBpJours(sender).click
        ' Dim Ce_Bp As Button = CType(sender, Button) 'cast le sender en bp
        ' MessageBox.Show(Ce_Bp.Name)
        For i = 0 To listeBpJours.Count - 1
            With listeBpJours(i)
                If .Name = sender.Name Then

                End If
            End With
        Next

    End Sub 'clic souris sur un bouton du calendrier actif
cela pourrait marcher sauf que :
AddHandler Bp.Click, AddressOf bp_click 'léve une erreur de convertion implicite ! la boucle est bouclé ?
non pas encore j'ai donc essayé cela :
AddHandler Bp.Click, AddressOf bp_click(Bp, ?????) et là je bloque :/

@ te lire et merci pour tes lectures de mes romans lol

Commentaire de Adn56 le 07/07/2012 20:53:01

Pour moi à cette heure, l'utilisation présenté ci dessus n'est pas "propre", il vaut mieux faire ainsi :

1-supprimer meslettres qui ne me semble pas utile
2-écrire la sub comme suit :
Private Sub ClickMesLettres(ByVal sender As System.Object, ByVal e As System.EventArgs)
dim lbl as label = directcast(sender, label)
For Each ctrl As Control In Controls 'pour chaque control sur la form
  If TypeOf ctrl Is label then
if ctrl.name = sender.name
.forecolor = Color.Black
.backcolor = Me.BackColor
else
.backcolor = Color.LightGreen
.forecolor = Color.Red
ExecutionSelecteur(lbl)
....
...

qu'en penses tu ?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Commande d'import de données du NET à ACCESS [ par Zenway ] Kelk'un pourrait-t'il m'expliquer quelles sont les commandes possibles ou me mettre sur la piste avec des solutions approchantes, pour importer des do Selecteur de fichiers [ par Carlos ] Comment est il possible d'ouvrir le selecteur de fichiers de windows et de remplir une variable avec le chemin du fichier selectionner?MerciCharles acces access 2000 avec VBA 2000 [ par rave le problème au secour !!!!! ] Salut j ai prob avec VBA pour access 2000, mon PC est en WIN 2000 avec Access 2000ci joint une partie du code:Dim net_tiers_doc As RecordsetDim tiers acces access 2000 avec VBA 2000 [ par rave le problème au secour !!!!! ] Salut j ai prob avec VBA pour access 2000, mon PC est en WIN 2000 avec Access 2000ci joint une partie du code:Dim net_tiers_doc As RecordsetDim tiers detection connection net [ par bertouil ] salut je voudrais savoir comment récupérerle nom de la connection internet active (le nom donné dans les propriétés de connexions du genre free,libert administration nt [ par Popop ] j'aimerais crée des comptes utilisateurs sous NT en vb.actuellement je le fait avec en lancant les commmandes dos (net user, net group etc...) est -il Net send & co [ par Peeloo ] Comment capter un msg net send recu et l'ecrire dans un Textbox ? creer un datagrid avec VB.NET [ par Cecile ] voila, j'y arrive sur VB6 mais impossible sur .net!!!j'essai de mettre toutes mes donnees d'une table ACCESS sur un datagrid VB.netj'ai cree une conne


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,201 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales