Simulation telephone [Résolu]

Signaler
Messages postés
15
Date d'inscription
dimanche 1 août 2010
Statut
Membre
Dernière intervention
1 décembre 2011
-
Messages postés
15
Date d'inscription
dimanche 1 août 2010
Statut
Membre
Dernière intervention
1 décembre 2011
-
je suis un débutant en VB.NET voici mon problème
j'aimerai faire une simulation d'un téléphone portable et parvenir à faire la communication et envoyer un message.
j'ai plusieurs formulaires reproduisant et représentant un téléphone par formulaire et ces derniers sont connectés à une BD ayant pour champs NUMTEL et CREDIT.
Ainsi un formulaire ne peut appeler l'autre que si il a du crédit sinon un message lui sera envoyé lui demandant de recharger son compte.
pour le MESSAGE sur chaque touche par exemple 2 il y a des lettres (2abc)
il faudrait qu'en cliquant deux fois par exemple que j'aie "b" dans l'écran qui est un textbox.
Ainsi j'ai de difficultés à faire un texto càd parvenir à écrire les différentes lettres se trouvant sur les boutons.
j'ai besoin de votre aide

5 réponses

Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
5
Bonjour,

Je ne sais pas si c'est la méthode la plus élégante, mais voici une solution possible.

Le principe :

1) Ajouter un timer (Timer1 dans mon exemple) de 1s à votre form.
2) Les options de chaque touche sont stocké dans la propriété Tag des boutons. Dans mon exemple, Button1.Tag "1;a;b;c" et Button2.Tag "2;d;e;f"

Et le code :
Public Class Form1

    Private enCours As Boolean 'Flag permettant de controler la frappe en cours
    Private carIndex As Integer 'Index du caractère à insérer
    Private lastButtonName As String 'Nom du dernier bouton appuyé

    Private Sub Touche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click

        'Bouton appuyé
        Dim bouton As Button = CType(sender, Button)

        'Caractères disponibles placés dans une table en découpant le tag par le caractère ';'
        Dim tCar() As String = bouton.Tag.ToString().Split(";"c)

        'Reset du timer
        Me.Timer1.Stop()
        Me.Timer1.Start()

        'Si une frappe est en cours et que le même bouton est appuyé
        If (enCours And (lastButtonName = bouton.Name)) Then

            'On incrémente l'index de caractère à insérer
            carIndex += 1

            'On controle qu'on ne dépasse pas le nombre max de caractères à dispositions pour la touche
            If carIndex > tCar.GetUpperBound(0) Then carIndex = 0

            'On efface le dernier caractère saisi
            Me.TextBox1.Text = Me.TextBox1.Text.Substring(0, Me.TextBox1.Text.Length - 1)

        Else

            'On initialise les variables pour une nouvelle frappe
            enCours = True
            carIndex = 0
            lastButtonName = bouton.Name

        End If

        'On insère le caractère
        Me.TextBox1.AppendText(tCar(carIndex))

    End Sub

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'On initialise les variables pour une frappe en treminée
        enCours = False
        carIndex = -1
        lastButtonName = String.Empty
    End Sub

End Class


Par contre, à vous de gérer si vous voulez que l'insertion se fasse à la position du curseur. Dans mon exemple, l'insertion se fait toujours à la fin du text.

Le principe est qu'on laisse une seconde à l'utilisateur pour appuyer à nouveau sur la même touche, sinon on considère que c'est une nouvelle frappe.

De cette manière vous pouvez accrocher tous vos évenements click de bouton à la sub Touche_Click.
Messages postés
15
Date d'inscription
dimanche 1 août 2010
Statut
Membre
Dernière intervention
1 décembre 2011

merci j'essaie d'appliquer la solution et je vous direz quoi
Grand merci
Messages postés
15
Date d'inscription
dimanche 1 août 2010
Statut
Membre
Dernière intervention
1 décembre 2011

un autre problème peut être que j'ai oublié d'expliciter ce que j'utilise plusieurs formulaires et j'aimerai par exemple sur le form2 en cliquant sur un bouton qu'il y est une réaction sur le form1 càd après l'appel du form2 par le form1 en cliquant sur le bouton OK du form2 cela puisse démarrer les chronos du form1 et celui du form2.

en bref je ne parvient pas à utiliser un objet d'un form sur un autre.
je ne sais pas si je me fais comprendre
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
5
Ce sujet est déjà traité sur le forum.

Il y a deux écoles pour cette question

1) La méthode barbare mais facile :
Public Class Form1

    Private Sub Cmd_OpenForm2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_OpenForm2.Click
        Form2.Show()
    End Sub

    Public Sub StartMyTimer()
        Me.TimerF1.Start()
    End Sub

End Class

Public Class Form2

    Private Sub Cmd_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Start.Click

        'Démarre le timer de form2
        Me.TimerF2.Start()

       'Démarre le timer de form1
        Form1.StartMyTimer()

    End Sub

End Class


2) La méthode propre :
Public Class Form1

    Private Sub Cmd_OpenForm2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_OpenForm2.Click
        Dim f2 As New Form2(Me)
        f2.Show()
    End Sub

    Public Sub StartMyTimer()
        Me.TimerF1.Start()
    End Sub

End Class

Public Class Form2

    Private _parent As Form

    Public Sub New(ByVal parent As Form)
        Me.InitializeComponent()
        _parent = parent
    End Sub

    Private Sub Cmd_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Start.Click

        'Démarre le timer de form2
        Me.TimerF2.Start()

        'Controle si la forme parente est bien de type Form1
        If TypeOf _parent Is Form1 Then
            'Démarre le timer de form1
            CType(_parent, Form1).StartMyTimer()
        End If

    End Sub

End Class


Je n'aime pas la première méthode car faire Form1.StartMyTimer() ne veut rien dire dans le contexte car Form1 est un type et non une instance de classe. Même si notre simpatique runtime s'y retrouve.
Messages postés
15
Date d'inscription
dimanche 1 août 2010
Statut
Membre
Dernière intervention
1 décembre 2011

je ne m'en sort pas tellement avec ce code
est t il possible de me proposer le code d'un chrono qui passerai sans problème????
SVP j'attends la réponse