[VB.Net] Souci avec une variable publique

Kerlouan29 Messages postés 7 Date d'inscription samedi 13 novembre 2010 Statut Membre Dernière intervention 25 juin 2011 - 24 juin 2011 à 19:27
 Utilisateur anonyme - 29 juin 2011 à 13:54
Bonjour
J'ai un souci dans mon programme: je n'arrive pas à utiliser une variable que j'ai déclarée dans un module.
Module Module_Variables_MTT
    Public Buy_in_MTT As Single = 0
    Public NombreRecaves As Single = 0
    Public Gain_MTT As Single = 0
    Public Gain_Net_MTT As Single = 0
    Public MTT_Enregistrement As New MTT
End Module


L'idée est de récupérer le contenu de 3 textbox (prénommée TXT_xxxxx)présentes dans une form qui n'est pas celle du démarrage et d'effectuer un calcul avec.
Souci: Erreur d'initializationExeption.

Private Sub BTN_Enregistrer_MTT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_Enregistrer_MTT.Click
        '""""" TEST pour voir si tous les champs sont remplis""""""""
        '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        Dim Test As Boolean = True
        If TXT_Buy_in_MTT.Text "" Then Test False
        If CHK_Recave.Checked True And TXT_Nombre_De_Recaves.Text "" Then Test = False
        If RBTN_ITM_Oui.Checked False And RBTN_ITM_Non.Checked False Then Test = False
        If RBTN_ITM_Oui.Checked True And TXT_Gain_MTT.Text "" Then Test = False
        '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        '""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
        If Test = False Then
            MessageBox.Show("Il manque des informations.")
            Exit Sub
        Else
            Gain_MTT = CSng(TXT_Gain_MTT.Text) - (CSng(TXT_Buy_in_MTT.Text) + CSng(TXT_Buy_in_MTT.Text) * CSng(TXT_Nombre_De_Recaves.Text))

        End If
    End Sub


J'ai essayé de faire avec une variable déclarée dans le sub: pas de souci. Je soupconne donc Gain_MTT d'être le problème.
Mon niveau encore trop faible m'a pas permis de trouver mon erreur d'où ce topic.
Donc où est mon erreur?


Merci :)

5 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
25 juin 2011 à 00:33
Salut,

La prochaine fois il serait bien de poster le message d'erreur en entier. La on ne sait pas trop. Gain_MTT est numérique (Single) donc je doute que son initialisation soit la cause de ton problème.


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
Kerlouan29 Messages postés 7 Date d'inscription samedi 13 novembre 2010 Statut Membre Dernière intervention 25 juin 2011 1
25 juin 2011 à 10:31
J'ai un peu modifié le programme: j'ai remplacé une texbox textbox par un NumericUpDown mais le souci reste le même au niveau de la ligne:
Gain_MTT = CSng(TXT_Gain_MTT.Text) - (CSng(TXT_Buy_in_MTT.Text) + CSng(TXT_Buy_in_MTT.Text) * CSng(NUD_Nombre_De_Recaves.Value))

J'ai copié le message: c'est pas très clair pour moi. J'espère que cela l'est pour toi.

L'exception System.TypeInitializationException n'a pas été gérée
Message=Une exception a été levée par l'initialiseur de type pour 'Historique_Winamax.Module_Variables_MTT'.
Source=Historique Winamax
TypeName=Historique_Winamax.Module_Variables_MTT
StackTrace:
à Historique_Winamax.Form_MTT.BTN_Enregistrer_MTT_Click(Object sender, EventArgs e) dans C:\Documents and Settings\Toff\Bureau\winamaxVB\Historique Winamax\Form_MTT.vb:ligne 40
à System.Windows.Forms.Control.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
à System.Windows.Forms.Control.WndProc(Message& m)
à System.Windows.Forms.ButtonBase.WndProc(Message& m)
à System.Windows.Forms.Button.WndProc(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
à System.Windows.Forms.Application.RunDialog(Form form)
à System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
à System.Windows.Forms.Form.ShowDialog()
à Historique_Winamax.Form_Demarrage.BTN_Enregistrer_Click(Object sender, EventArgs e) dans C:\Documents and Settings\Toff\Bureau\winamaxVB\Historique Winamax\Form_Demarrage.vb:ligne 15
à System.Windows.Forms.Control.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnClick(EventArgs e)
à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
à System.Windows.Forms.Control.WndProc(Message& m)
à System.Windows.Forms.ButtonBase.WndProc(Message& m)
à System.Windows.Forms.Button.WndProc(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
à Historique_Winamax.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81
à System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
à System.Threading.ThreadHelper.ThreadStart()
InnerException: System.InvalidCastException
Message=La conversion de la chaîne "" en type 'Integer' n'est pas valide.
Source=Microsoft.VisualBasic
StackTrace:
à Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
à Historique_Winamax.MTT..ctor() dans C:\Documents and Settings\Toff\Bureau\winamaxVB\Historique Winamax\Classe_MTT.vb:ligne 3
à Historique_Winamax.Module_Variables_MTT..cctor() dans C:\Documents and Settings\Toff\Bureau\winamaxVB\Historique Winamax\Module_Variables_MTT.vb:ligne 6
InnerException: System.FormatException
Message=Le format de la chaîne d'entrée est incorrect.
Source=Microsoft.VisualBasic
StackTrace:
à Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
à Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
InnerException:


En bidouillant autrement je pense que j'arriverai à mes fins mais j'aimerai comprendre cette erreur pour progresser.
Merci.
0
ricky84 Messages postés 44 Date d'inscription dimanche 8 septembre 2002 Statut Membre Dernière intervention 13 janvier 2014
25 juin 2011 à 11:00
aaaah ! la clarté des messages d'erreur de VB Net !!! quand t'as fini de lire, t'est encore plus perdu
0
ilham0tsdi02 Messages postés 1 Date d'inscription jeudi 23 juin 2011 Statut Membre Dernière intervention 27 juin 2011
27 juin 2011 à 19:51
[^^sad1][^^sad1][^^sad1][^^ma

d5][^^confus2]
0

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

Posez votre question
Utilisateur anonyme
29 juin 2011 à 13:54
Bonsoir,
L'utilisation de variables publiques est à éviter autant que possible.
Dans ton cas, il te suffit d'effectuer ton calcul à l'intérieur même de ton formulaire appelé et de renvoyer le résultat au formulaire appelant par une simple propriété.
Exemple de code du formulaire appelé :
Public Class frmGain
    'retourne le résultat 
    ReadOnly Property Gain() As Single
        Get
            'attention aux problemes de conversion string en single qu'il faut gérer ici
            'erreurs de frappes de l'utilisateur ainsi que les points, les virgules, espaces etc...
            Return Convert.ToSingle(TXT_Gain_MTT.Text) - ( _
             Convert.ToSingle(TXT_Buy_in_MTT.Text) + _
             Convert.ToSingle(TXT_Buy_in_MTT.Text) * Convert.ToSingle(TXT_Nombre_De_Recaves.Text))
        End Get
    End Property

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'on cache la feuille afin de pouvoir lire sa propriété Gain
        Me.Hide()
    End Sub
End Class


Et le code de l'appelant :

'on instancie le formulaire de calcul et on l'affiche
Dim fGain As New frmGain
fGain.ShowDialog()
'l'utilisateur a cliqué sur OK apres avoir rempli les textboxs (le formulaire est caché)
'on lis sa propriété Gain
Dim MonCalcul As Single = fGain.Gain
'on ferme le formulaire
fGain.Close()
'on continue le traitement....
MessageBox.Show(MonCalcul.ToString)


Comme tu peux le voir, on s'est passé de variables publiques via un module.

Bonne soirée.
0
Rejoignez-nous