Appeller un événement pendant un code.

Signaler
Messages postés
9
Date d'inscription
vendredi 24 janvier 2014
Statut
Membre
Dernière intervention
17 juin 2015
-
Messages postés
15413
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 janvier 2021
-
Bonjour,

J'ai encore un petit problème en VB.

J'ai deux form : form1 et pass2
Lorsque que je clique sur un bouton dans le form1, il lance pass2 à une condition sinon, l'exécution se poursuit.

Dans pass2, je demande un mot de passe.
Et lorsque le mot de passe est correct, il modifie la condition pour le lancement de la suite de la sub dans form1.
Or, comment relancer la sub dans form1 depuis la sub de pass2.


Je vous copie les codes ci dessous :
DANS FORM1 :
If Pmail1.Visible = False Then 'ici je vérifie la condition
pass2.Show() 'condition respectée : lancement de pass2
Exit Sub 'Arrêter l'execution
End If
'suite du code ici !

DANS PASS2 :

'execution après que le mot de passe soit entré dans un textbox
Dim password As String
Dim filer As System.IO.StreamReader
Dim myreadline As String
Dim myreadline2 As String
Dim filer2 As System.IO.StreamReader
'recherche du fichier1
filer = My.Computer.FileSystem.OpenTextFileReader(My.Computer.FileSystem.CurrentDirectory & "\password1.txt")
'lecture du fichier1
myreadline = filer.ReadLine
'recherche du fichier2
filer2 = My.Computer.FileSystem.OpenTextFileReader(My.Computer.FileSystem.CurrentDirectory & "\password2.txt")
'lecture du fichier2
myreadline2 = filer2.ReadLine
password = myreadline & myreadline2
If pass.Text = password Then
Form1.Pmail1.Visible = True
'C'EST ICI QUE JE SOUHAITE RENVOYER A L'EXECUTION DU FORM1
Me.pass.Text = ""
Me.Hide()
Else
Me.pass.Text = ""
Me.Hide()
End If


Merci de ne pas juger la mauvaise sécurité du mot de passe ! Je compte changer tout ça plus tard :)

6 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour

Quand tu lances pass2 que fais tu avec form1 ? (hide?,close ?)
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
classpass2 herite de la class form contient un maskedbox et un
bouton
un évenement okppassword cet évenement est déclenché dès que le password est correct

Public Class classpass2
Inherits Form
Private motdepasse As String = "123456789"
Event okpassword()
WithEvents mypassoword As New MaskedTextBox
WithEvents valid As New Button
Public Sub New()
Me.Height = 300
Me.Width = 300
Me.MaximizeBox = False
Me.MinimizeBox = False
Me.StartPosition = FormStartPosition.Manual
valid.Enabled = False
valid.Text = "VALIDER"
mypassoword.PasswordChar = "*"c
mypassoword.Font = New Font("calibri", 12, FontStyle.Bold)
Me.Controls.Add(mypassoword)
Me.Controls.Add(valid)
mypassoword.Location = New Point(Me.Width \ 2 - mypassoword.Width \ 2, 10)
valid.Location = New Point(Me.Width \ 2 - valid.Width \ 2, mypassoword.Bottom + 10)
End Sub
Private Sub valid_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles valid.MouseClick
If mypassoword.Text = motdepasse Then
RaiseEvent okpassword()
Me.Dispose()
End If
End Sub

Private Sub mypassoword_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles mypassoword.KeyUp
If mypassoword.Text.Length = motdepasse.Length Then
valid.Enabled = True
Else
valid.Enabled = False
End If
End Sub
End Class


Public Class Form1
'on definit pass2
Private WithEvents pass2 As classpass2

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load

If Pmail1.Visible = False Then 'ici je vérifie la condition
pass2 = New classpass2
pass2.Location = New Point(Me.Width \ 2 - pass2.Width \ 2, Me.Height \ 2 - pass2.Height \ 2)
pass2.ShowDialog()
Exit Sub 'Arrêter l'execution
End If
End Sub

Private Sub pass2_okpassword() Handles pass2.okpassword
'ici tu continues le password est correct
End Sub
End Class
Messages postés
7225
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 janvier 2021
118
Bonjour,

Un truc tout simple. Regarde ce que fait ce code avec 2 Form

Form1:

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Form2.ShowDialog()
        MsgBox("on continue")
    End Sub
   


Form2:

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Me.Hide()
    End Sub


tu verras que ton message n'apparaitra qu' à la fermeture de ton Form2
Messages postés
7225
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 janvier 2021
118
Si tu veux a afficher le message que si le mot de passe est correct. A l'aide d'un CheckBox dans le form2 qui passe à True :

Form1:

  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Form2.ShowDialog()
        If Form2.CheckBox1.Checked = True Then
            MsgBox("on continue")
        Else
            'rien
        End If

    End Sub


Form2:

  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If pass.Text = "123" Then
            CheckBox1.Checked = True
            'C'EST ICI QUE JE SOUHAITE RENVOYER A L'EXECUTION DU FORM1
            Me.pass.Text = ""
            Me.Hide()
        Else
            CheckBox1.Checked = False
            Me.pass.Text = ""
            Me.Hide()
        End If
        Me.Hide()
    End Sub


Messages postés
7225
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 janvier 2021
118
Il va sans dire que les propriétés de la CheckBox
Enabled ou Visible sont à False
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour,
je ne comprends pas pourquoi il ne suffirait pas :
- de déclarer publique une variable booléenne verif
- d'ouvrir un form2 (pour le mot de passe) en modal
---- de donner à verif la valeur True si bon mot de passe
---- de fermer form2
- dans form1 : continuer si verif = true ou message et quitter si false.
Messages postés
15413
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 janvier 2021
503
Bonjour Uc, parce que les variables globales sont déconseillées en .Net.

Messages postés
7225
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 janvier 2021
118 >
Messages postés
15413
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 janvier 2021

Oui, il faut déclarer ta variable Public dans un module pour qu'elle soit reconnue!
Messages postés
15413
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 janvier 2021
503 >
Messages postés
7225
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
23 janvier 2021

Bonjour, oui ça marche, mais ça n'est pas conseillé.
La philosophie .Net est que tout passe par les objets, et donc il faudrait se ne servir des variables globales qu'en dernier recours.

En plus, souvent, ça prend une case mémoire pour quelque chose de ponctuel.
Messages postés
15413
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
23 janvier 2021
503
Bonjour, voici un petit tuto, parlant des différentes façons de faire interagir deux forms
http://codes-sources.commentcamarche.net/faq/11107-interactions-entre-form-en-net-c-et-vb-net

Certaines on déjà été évoquées, mais pas toutes.