VB.Net Prog. sur mon iPAQ Erreur

Résolu
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 - 22 août 2007 à 02:19
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 - 22 août 2007 à 20:41
Salut J'ai un Méga problème...

Quand j'utilise mon porgramme (programme codé sur VB.Net Compact Framework - Visual Sutio 2005) que j'ai importé sur mon iPaq J'appuis sur un bouton de mon programme et j'ai un messahge d'erreur (il ferme mon programe)

SVP aidez moi.. J'ai presque fini mon prog... et ca me dit qu'un bouton (mon bouton cmdCalcul) ne fonctionne pas. Je vous annexe l'enssemble de mon code... Si vous voyer d'ou peux venir le probleme..

Ca dit:
Calcul.exe InvalidCastException
à
Microsoft.VisualBasic.CompilerService.Conversions.ToDouble()
à
Microsoft.VisualBasic.CompilerService.Conversions.ToDouble()
à DataGrid.Form1.cdmCalcul_Click()
à
System.Windows.Forms.Control.OnClick()
à
System.Windows.Forms.Button.OnClick()
à
System.Windows.Forms.ButtonBase.WnProc()
à
System.Windows.Forms.Control._InteralWnProc()
àMicrosoft.AGL.Forms.EVL.EnterMainLoop()
à
System.Windows.Forms.Application.Run()

Imports

System.IO
Imports

System.Math
Public

Class Form1

Public FichierTexte
As
String

Public Tableau(0)
As
String

Public CoordYStation
As
Double

Public CoordXStation
As
Double

Public CoordYBack
As
Double

Public CoordXBack
As
Double

Public CompteurFormule
As
Integer

Public dbRadian
As
Double = (180 / System.Math.PI)

Public AppPath
As
String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase)

Public LigneSplit(4)
As
String

Dim Etape1
As
Double, Etape2_Dx
As
Double, Etape2_Dy
As
Double, Etape3_X
As
Double, Etape3_Y
As
Double 

Dim X1
As
Double, X2
As
Double, Y1
As
Double, Y2
As
Double, dX
As
Double, dY
As
Double

Dim aTan1
As
Double

Public aTan2
As
Double

Dim dbDistance
As
Double

Dim Degres
As
Single, Minutes
As
Long, Secondes
As
Long

Dim Degres_
As
Single, Minutes_
As
Single, Secondes_
As
Double

Dim Degres__
As
Single, Minutes__
As
Single, Secondes__
As
Double

Dim sglValeurDD
As
Single 

 

Public
Function GisementDepart()

'*******************************************************

'Trouver Gisement de l'Ouverture

'*******************************************************

If CompteurFormule = 1 ThenX1 CDbl(CoordXStation)X2
CDbl(CoordXBack)Y1 CDbl(CoordYStation)Y2

CDbl(CoordYBack)

ElseIf CompteurFormule = 2 ThenX1 CDbl(CoordXStation)X2
CDbl(CoordXBack)Y1 CDbl(CoordYStation)Y2

CDbl(CoordYBack)

ElseIf CompteurFormule = 3
ThenX1 =

CDbl(Replace(lblCoordX.Text,
".", ","))X2 CDbl(CoordXStation)Y1

CDbl(Replace(lblCoordY.Text,
".",
","))Y2 =

CDbl(CoordYStation)

ElseIf CompteurFormule = 4
Then

'X1 = CDbl(Form1.lblStationCoordXPolaire.Caption)

'X2 = CDbl(Form1.lblBackCoordXPolaire.Caption)

'Y1 = CDbl(Form1.lblStationCoordYPolaire.Caption)

'Y2 = CDbl(Form1.lblBackCoordYPolaire.Caption)

End
IfdX = X2 - X1

dY = Y2 - Y1

'***********************************************************************

'Formule pour connaître le cadrant dans lequel se trouve les coordonnées

If dX >= 0
And dY >= 0
ThenaTan1 = Atan(dX / dY)

ElseIf dX >= 0
And dY < 0
Or dX < 0
And dY < 0
ThenaTan1 = Atan(dX / dY) + System.Math.PI

ElseIf dX < 0
And dY >= 0
ThenaTan1 = Atan(dX / dY) + (2 * System.Math.PI)

End
If

'************************************************************************aTan2 = aTan1 * dbRadian

'Convertir les Radians en Degrés décimaux

'******************************************************************************

' Conversion en Degré, Minute, Seconde pour des fins visuel seulementDegres = Fix(aTan2)

'Fix sans décimal et Val avec décimalMinutes = Fix((aTan2 - Degres) * 60)

Secondes = (((aTan2 - Degres) * 60) - Minutes) * 60

'******************************************************************************

'Calcul Inverse entre Station et Back

If StatusBar1.Text =
"Facteur: 1"
ThendbDistance = (Sqrt(dX ^ 2 + dY ^ 2)) / 1

ElsedbDistance = (Sqrt(dX ^ 2 + dY ^ 2)) / 0.9999

End
If

If CompteurFormule = 1
ThenlblDistanceConnu.Text = Fix(dbDistance) + Format(dbDistance - Fix(dbDistance),

"0.000")lblDistanceConnu.Text = lblDistanceConnu.Text & Space(1) &

"m"

ElseIf CompteurFormule = 2
ThenlblDistance.Text = Fix(dbDistance) + Format(dbDistance - Fix(dbDistance),

"0.000")lblDistance.Text = lblDistance.Text & Space(1) &

"m"

ElseIf CompteurFormule = 4
Then

'lblDistanceConnuPolaire.text = Fix(dbDistance) + Format(dbDistance - Fix(dbDistance), "0.000")

'lblDistanceConnuPolaire.text = lblDistanceConnuPolaire.text & Space(1) & "m"

End
IfGisementDepart = aTan2

End
Function

Public
Function DegreDecimal_en_DMS()

If CompteurFormule = 1
ThensglValeurDD = aTan2

ElseIf CompteurFormule = 2
Then

'sglValeurDD = frmCalcul.lblAzimut.Caption

ElseIf CompteurFormule = 3
Or CompteurFormule = 4
ThensglValeurDD = GisementDepart()

End
If

' Conversion en DMS pour des fins visuel seulementDegres_ = Fix(sglValeurDD)

'Fix sans décimal et Val avec décimalMinutes_ = Fix((sglValeurDD - Degres_) * 60)

Secondes_ = (((sglValeurDD - Degres_) * 60) - Minutes_) * 60

Secondes_ = Format(Secondes_,

"0.00")
'Format(dbDistance - Fix(dbDistance), "0.000")DegreDecimal_en_DMS = Degres_ &

"°" & Minutes_ &
"'" & Val(Secondes_) &
"''"

'DegreDecimal_en_DMS = Format(DegreDecimal_en_DMS, "0.00000")

End
Function

Public
Function DMS_en_DegreDecimal()

Dim AzimutDMS
As
Double

'AzimutDMS = CDbl(frmCalcul.txtAzimutSaisi) 
Degres__ CDbl(Fix(AzimutDMS))Minutes__
CDbl(Fix((AzimutDMS - Degres__) * 100))Secondes__ CDbl((((AzimutDMS - Degres__) * 100) - Minutes__) * 100)DMS_en_DegreDecimal

CDbl((((Secondes__ / 60) + Minutes__) / 60) + Degres__)

End
Function

Public
Function CalculCoord()

If CompteurFormule = 3
ThenEtape1 = DMS_en_DegreDecimal()

Else

If DMS_en_DegreDecimal() + aTan2 > 360
ThenEtape1 =

CDbl(DMS_en_DegreDecimal() + aTan2) - 360

ElseEtape1 =

CDbl((DMS_en_DegreDecimal() + aTan2))
'345,97969

End
If

End
IfEtape2_Dx = Sin((Etape1 * System.Math.PI) / 180) *

CDbl(Replace(txtDistanceSaisi.Text,
".",
","))Etape2_Dy = Cos((Etape1 * System.Math.PI) / 180) *

CDbl(Replace(txtDistanceSaisi.Text,
".",
","))Etape3_X = CoordXStation + Etape2_Dx

Etape3_Y = CoordYStation + Etape2_Dy

lblCoordX.Text = Format(Etape3_X,

"0.0000")lblCoordY.Text = Format(Etape3_Y,

"0.0000")

End
Function 

 

 

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

'Private Sub DegréRadian()
'Reponse.Text (Valeur.Text * Pi) / 180 'txt.Text (Sin(1 * Pi / 180))

'End Sub

'Private Sub RadianDegré()

'Reponse.Text = (Valeur.Text * 180) / Pi

'End Sub

'txt1.Text = Sin(1 * System.Math.PI / 180)

Dim i
As
IntegerStatusBar1.Text =

"Facteur: 1"

Try

Dim ObjetFichier
As StreamReader =
New StreamReader(AppPath &
"\Coord.txt")

DoFichierTexte = ObjetFichier.ReadLine()

If FichierTexte
Is
Nothing
Theni = i - 1

Else

If i = 0
Then

ReDim Tableau(i)

Else

ReDim
Preserve Tableau(i)

End
IfTableau(i) = FichierTexte

End
If

If i = 0
ThenTextBox1.Text = Tableau(i)

ElseTextBox1.Text = TextBox1.Text & vbCrLf & Tableau(i)

'vbCrLf = Changement de ligne

End
Ifi = i + 1

Loop
Until FichierTexte
Is
NothingObjetFichier.Close()

i = i - 1

Catch exc
As ExceptionMsgBox(

"Fichier inexistant")

End
Try

End
Sub

Private
Sub cdmCalcul_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles cdmCalcul.Click

Dim i
As
IntegerCompteurFormule = 1

'Utilisation pour chercher variable dans fichier texte

For i = 0
To UBound(Tableau)LigneSplit = Tableau(i).Split(

" ")

If LigneSplit(0) = txtStation.Text
ThenCoordYStation = LigneSplit(1)

CoordXStation = LigneSplit(2)

lblStation.Text = CoordYStation & Space(1) & CoordXStation

End
If

If LigneSplit(0) = txtback.Text
ThenCoordYBack = LigneSplit(1)

CoordXBack = LigneSplit(2)

lblBack.Text = CoordYBack & Space(1) & CoordXBack

End
If

Next iGisementDepart()

lblAzimutConnu.Text = DegreDecimal_en_DMS

End
Sub

Private
Sub mnuFacteurGeodesique_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs) Handles mnuFacteurGeodesique.ClickmnuFacteurLocal.Checked FalsemnuFacteurGeodesique.Checked

TrueStatusBar1.Text =

"Facteur: 0,9999"

End
Sub

Private
Sub mnuFacteurLocal_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs) Handles mnuFacteurLocal.ClickmnuFacteurLocal.Checked TruemnuFacteurGeodesique.Checked

FalseStatusBar1.Text =

"Facteur: 1"

End
Sub

Private
Sub cmdTravAzimut_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles cmdTravAzimut.ClickCompteurFormule = 3

'Utilisé pour la Fonction GisementDepartCalculCoord()

GisementDepart()

lblAzimutSaisi.Text = DegreDecimal_en_DMS()

lblAzimutChange.Text =

"Azimut du Point" & Space(1) & txtPointSaisi.Text & Space(1) &
"vers le point" & Space(1) & txtStation.Text

End
SubEnd

Class 

 

 

 

 

 

 

 

 

 

 

 

 

 

3 réponses

Baguauda Messages postés 219 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 28 novembre 2008 1
22 août 2007 à 08:42
tout est dans le message
Calcul.exe InvalidCastException
à
Microsoft.VisualBasic.CompilerService.Conversions.ToDouble()

Problème de conversion.
1) Vérifie tes conversion.
2) ajoute des try catch comme ca l'application ne se stoppera pas.
3) avant conversion vérifie les donnée, par exemple lors de la conversion string Double - une chaine vide ca passe pas.
3
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
22 août 2007 à 13:12
Ok merci je  vérifie ca mais pourquoi avec l'émulateur ca fonctionne très bien ????
0
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
22 août 2007 à 20:41
J'ai réglé le prob... Chiant à corriger mais ca marche...

Merci
0
Rejoignez-nous