IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Echange d'information VB.NET vers VB6 avec evenement


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut Echange d'information VB.NET vers VB6 avec evenement
    Bonjour,

    Alors je m'adresse à vous pour me donnée quel que pise sur un petit problème.

    Depuis 1 mois je travail sur un gestionnaire d'alarme et c'était le bordel dans mon code, un mec de ma boite est passé et il ma donné un petit cours sur les bonnes pratique du coup j'ai quasi tous effacer et je me rend compte que parfois il est possible de faire des choses simple avec du code simple alors que je me prenais la tête en me fixant des contraintes. Du coup dans mon gestionnaire d'alarme qui s'agit d'un Form avec un datagridview et un simulateur en VB6, j'ai garder une interface entre les deux où je peux lancer des procédures sur mon code en VB6 pour ajouter directement des alarmes dans mon datagridview. Cette technique me permet de retirer toute ma partie scrutation dans mon gestionnaire d'alarme ce qui allége largement mon code, je suis partie plutôt sur un mode pooling où j'attend un évènement pour exécuter une procédure d'où le principe de la programmation objet en même temps. (En faite, j'ai simplement importer ma partie scrutation dans mon simulateur)

    Mon problème est que mon interface me permet seulement d'exécuter des procédures du gestionnaire sur mon code VB6.

    J'aurai aimé pouvoir exécuter une procédure sur mon code VB6 ou alors informer mon code VB6 d'un changement de variable lors d'un évènement dans mon gestionnaire.

    Code actuel pour l'évènement supprimer une alarme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Public Sub cms_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            If sender.text = "Suppress Alarm" Then
                Dim z As Integer
                For z = 0 To MesAlarmes.i - 1
                    If DataGridView1.Rows(z).Selected = True Then
                        MesAlarmes.DicoAlarm2(DataGridView1.Rows(z).Cells(3).EditedFormattedValue).Supprimer = True
                        MesAlarmes.DicoAlarm2(DataGridView1.Rows(z).Cells(3).EditedFormattedValue).Etat = False
                        DataGridView1.Rows.RemoveAt(z)
                        FenPoubelle.MesAlarmes = MesAlarmes
                        Exit Sub
                    End If
                Next
            End If
        End Sub
    Je veux signaler à mon code VB6 que mon alarme est supprimer.

    Je veux réaliser la même action avec un CheckBox qui se trouve à la première colonne qui signal que l'alarme est acquitté lorsqu'on valide le checkbox. Je voudrai en gros signaler à mon code VB6 qu'une alarme est acquitté.

    Je voudrai aussi vos impression sur la manière de résoudre mes problèmes de la manière la plus bonne possible, c'est-à-dire, sans scrutation si possible !!

    Merci d'avance pour vos solutions.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut
    J'ai réussi à récupérer la ligne dans mon dgv lors de l'évènement "click droit" mais par la suite je passe par deux autres procédures avant de supprimer ma ligne, je voudrai pouvoir transmettre la ligne d'un procédure à une autre en argument d'entré mais je sais pas comment le faire avec un évènement.

    Voila le code de mon évènement Click droit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Private Sub AffichierMenu_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDown
     
            If e.Button = MouseButtons.Right Then ' Lorsqu'on fait un click *droit*
                'un try ... catch pour eviter une exception au clic sur une entete        
                Try
                    DataGridView1.Rows(e.RowIndex).Selected = True
                    OuvrirMenu(e.RowIndex) 'Ouvre un menu
                Catch ex As ArgumentOutOfRangeException
                End Try
     
            End If
     
        End Sub
    Cette évènement me permet de selectionner la ligne sur la quelle j'ai réaliser un click droit pour ensuite ouvrir un menu.

    Voila le code qui permet d'ouvrir un menu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    'Procedure qui permet d'ouvrir un menu
        Private Sub OuvrirMenu(ByVal e As Object)
            ' Create a new ContextMenuStrip control.
            Dim z As Integer
            ContextMenuStrip1 = New ContextMenuStrip()
            AddHandler ContextMenuStrip1.Opening, AddressOf cms_Opening
     
            For z = 0 To MesAlarmes.i - 1
                If DataGridView1.Rows(z).Selected = True Then
                    DataGridView1.Rows(z).ContextMenuStrip = ContextMenuStrip1
                End If
            Next
     
        End Sub
        'Procedure qui contient ce qui ce trouve dans le menu
        Private Sub cms_Opening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
            ' Acquire references to the owning control and item.
            Dim c As Control = ContextMenuStrip1.SourceControl
            Dim tsi As ToolStripDropDownItem = ContextMenuStrip1.OwnerItem
     
            ' Clear the ContextMenuStrip control's 
            ' Items collection.
            ContextMenuStrip1.Items.Clear()
     
            ' Populate the ContextMenuStrip control with its default items.
     
            ContextMenuStrip1.Items.Add("Continue Updating")
            AddHandler ContextMenuStrip1.Items(0).Click, AddressOf cms_Click
            ContextMenuStrip1.Items.Add("-")
            ContextMenuStrip1.Items.Add("Acknowledge Single Alarm")
            AddHandler ContextMenuStrip1.Items(2).Click, AddressOf cms_Click
            ContextMenuStrip1.Items.Add("-")
            ContextMenuStrip1.Items.Add("Open Control Display")
            AddHandler ContextMenuStrip1.Items(4).Click, AddressOf cms_Click
            ContextMenuStrip1.Items.Add("Open Faceplate Display")
            AddHandler ContextMenuStrip1.Items(5).Click, AddressOf cms_Click
            ContextMenuStrip1.Items.Add("Open Detail Display")
            AddHandler ContextMenuStrip1.Items(6).Click, AddressOf cms_Click
            ContextMenuStrip1.Items.Add("-")
            ContextMenuStrip1.Items.Add("Suppress Alarm")
            AddHandler ContextMenuStrip1.Items(8).Click, AddressOf cms_Click
            ' Set Cancel to false. 
            ' It is optimized to true based on empty entry.
            e.Cancel = False
        End Sub
    L'évènement cms_Click est déjà dans le poste 1. Je voudrai pouvoir importer mon "e.RowIndex" qui se trouve dans mon évènement click droit dans l'évènement cms_Click ce qui me permettrait de retirer ma scrutation pour savoir quel ligne est sélectionné et ce qui me permettrait par la suite de retirer la sélection d'une ligne.

    Merci d'avance pour vos solutions !!

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,

    Tout ça me paraît bien compliqué. Mais peut-être ai-je raté quelque chose ?
    Est-ce que tu ne peux pas plutôt :
    • Créer une seule fois le menu contextuel (en design ou par code) plutôt que de le reconstruire à chaque ouverture,
    • Associer le menu contextuel au DataGridView plutôt que de l'ouvrir manuellement sur l'évènement MouseDown,
    • Définir un évènement différent pour chaque item du menu afin d'éviter le test sur le libellé (pas beau). D'autant que dans cms_click, sender est de type Object et que la propriété Object.Text n'existe pas. Du coup il faudrait transtyper et ... Bref.
    • Utiliser la propriété DataGridView.SelectedRows qui te donnera une collection des lignes sélectionnées.

    Bref, je pense qu'on peut faire un peu plus simple pour répondre à ton besoin. Maintenant détrompe moi si quelque chose m'a échappé dans ton architecture.
    Eb.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut
    Je suis pas contre ce que tu dis et j'aurai aimer approfondi un peu sur le fait que c'est pas beau !!

    Sinon je me vois pas rajouter un menu dans le datagridview, mon client veux un menu lorsqu'il click sur un bouton click droit.

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut
    En faite l'idée du SelectedRows, c'est pas mal mais justement moi mon bute c'est de supprimer la sélection, car pour l'instant c'est un moyen de substitution pour savoir sur quel ligne j'ai réaliser un click droit mais j'essaye de dire "Stop" à la programmation de magouille !!

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 196
    Par défaut
    si tu veux vraiment coder propre, ca va prendre un peu de temps
    tu peux déjà commencer par lire ca : http://plasserre.developpez.com/cours/vb-net/

    après c'est en codant et en essayant des technologies qu'on voit ce qu'on a raté dans ce qu'on a codé avant ...

    par exemple des addhandler c'est bien, mais ca nécessite des removehandler sinon ca fait une fuite mémoire
    un fuite sur une appli qui ne fonctionne pas longtemps mais sur une appli h24 ca fini toujours par planter

    après si tu veux communiquer entre 2 applis (c'est le titre du topic, bien qu'en lisant en diagonale je ne vois pas grand chose qui s'y réfère) il y a plusieurs méthodes
    si les 2 applis peuvent se connecter sur la même base de données il y a moyen de faire quelque chose par là
    sinon par tcp/ip (même en local)
    sinon il y a aussi une dll qui a trainée il y a quelques semaines sur le forum et qui permet de faire du messaging entre une appli vb6 et appli vb.net
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    sinon il y a aussi une dll qui a trainée il y a quelques semaines sur le forum et qui permet de faire du messaging entre une appli vb6 et appli vb.net
    Oui c'est lié à son développement.
    Mais là c'est dans la partie de la dll VB.net.

    Vu la façon dont tu procédes, ton datagridview à la propriété multiselect à false, (sinon tu ne supprimes que la première ligne sélectionnée, ce qui ne correspond pas forcément à celle cliquée) tu peux faire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MesAlarmes.DicoAlarm2(DataGridView1.SelectedRows(0).Cells(3).EditedFormattedValue).Supprimer = True
    Suit les conseils de ebastien et Pol63.
    C'est préférable de lier chaque élément du menu à une méthode qui lui est propre.
    Pour l'instant tu peux connaître facilement la ligne sélectionné de ton DataGridView.
    Si tu as besoin de transmettre des info par évènement, je te montrerais comment faire des évènements personnalisés.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #8
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Citation Envoyé par dragondumond Voir le message
    Je suis pas contre ce que tu dis et j'aurai aimer approfondi un peu sur le fait que c'est pas beau !!
    Tester un libellé pour faire une action, ça marche ... jusqu'au jour où tu décides de modifier le libellé. Tu vas te palucher tout ton code pour vérifier si il y a un impact ?

    Citation Envoyé par dragondumond Voir le message
    Sinon je me vois pas rajouter un menu dans le datagridview, mon client veux un menu lorsqu'il click sur un bouton click droit.
    Ok, tu veux que la sélection se fasse sur le click droit. Pourquoi pas. Mais il n'empêche que tu n'es pas obligé de reconstruire tout ton menu lors de chaque affichage. Tu peux même le créer en mode design une bonne fois pour toute.
    Et puis si tu veux coder propre, évite aussi les ContextMenuStrip1 et autre DataGridView1. Ca devient très vite illisible.

  9. #9
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut
    J'avoue que sa fait pas très beau DataGridView1 mais je compte les changer le plus rapidement possible et je m'excuse d'avance si c'est illisible. Tous vos suggestions, je les retiens et j'essaye de les appliquer.

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/06/2011, 17h13
  2. Débugage : VB.NET vers ActiveX VB6
    Par pounaid dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 03/02/2009, 14h24
  3. Réponses: 4
    Dernier message: 26/11/2008, 13h59
  4. Envoyer des informations en POST vers une url en vb6
    Par bugz57 dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 18/06/2008, 08h59
  5. utiliser une DLL faite en vb6 avec VB.net
    Par j.sineau dans le forum VB.NET
    Réponses: 6
    Dernier message: 10/12/2007, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo