Simulation telephone

Résolu
touraco510 Messages postés 15 Date d'inscription dimanche 1 août 2010 Statut Membre Dernière intervention 1 décembre 2011 - 29 mars 2011 à 04:52
touraco510 Messages postés 15 Date d'inscription dimanche 1 août 2010 Statut Membre Dernière intervention 1 décembre 2011 - 16 avril 2011 à 00:56
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

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
29 mars 2011 à 09:29
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.
3
touraco510 Messages postés 15 Date d'inscription dimanche 1 août 2010 Statut Membre Dernière intervention 1 décembre 2011
29 mars 2011 à 23:04
merci j'essaie d'appliquer la solution et je vous direz quoi
Grand merci
0
touraco510 Messages postés 15 Date d'inscription dimanche 1 août 2010 Statut Membre Dernière intervention 1 décembre 2011
30 mars 2011 à 00:30
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
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
30 mars 2011 à 08:59
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
touraco510 Messages postés 15 Date d'inscription dimanche 1 août 2010 Statut Membre Dernière intervention 1 décembre 2011
16 avril 2011 à 00:56
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
0
Rejoignez-nous