Bonjour,
Lors de la compilation de mon projet, j'ai une erreur "Impossible d'effectuer un cast d'un objet de type 'system.compiler.class' en type 'system.compiler.struct'", et là je ne vois pas trop pourquoi.
Mon code est le suivant:
J'ai une classe de variables qui me défini une espèce de forme élémentaire de dessin:
Cette classe est appelée dans une autre classe beaucoup plus importante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 Public Class ClassDessinLadder ' Type de donnée pour le dessin des équations Dim _TypeContact As Integer ' code du type de contact 1:NO/2:NF/0:Rien Dim _BG As Integer ' code du dessin à gauche du contact Dim _HG As Boolean ' code du dessin à gauche de la variable True:Trait vertical/False:Rien Dim _Variable As String ' Adresse de la variable si elle existe '' Constructeurs Friend Sub New(ByVal TypeC As Integer, BasGauche As Integer, HautGauche As Integer, Var As String) _TypeContact = TypeC _BG = BasGauche _HG = HautGauche _Variable = Var End Sub '' Accesseurs Property TypeContact() As Integer Get Return _TypeContact End Get Set(ByVal Valeur As Integer) _TypeContact = Valeur End Set End Property Property BasGauche() As Integer Get Return _BG End Get Set(ByVal Valeur As Integer) _BG = Valeur End Set End Property Property HautGauche() As Integer Get Return _HG End Get Set(ByVal Valeur As Integer) _HG = Valeur End Set End Property Property Variable() As String Get Return _Variable End Get Set(ByVal Valeur As String) _Variable = Valeur End Set End Property End Class
Bon cela a peut-être l'air un peu tordu, mais pourtant dans ma tête c'est "presque" super clair:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 Public Class ClassEquaSeq ' Cette classe definit l'ensemble des données associées à la définition des séquences du séquentiel Protected Structure AdresseMatrice Dim AdrV As Integer Dim AdrH As Integer End Structure Protected _Equa As New List(Of String) Protected _Num As Integer Protected _Decode As Boolean Protected _DessinEqua As New List(Of Dictionary(Of AdresseMatrice, ClassDessinLadder)) '' Constructeurs Friend Sub New(ByVal Numero As Integer, ByVal Equation As String) _Num = Numero _Equa.Add(Equation) _Decode = False _DessinEqua.Add(Nothing) End Sub Friend Sub New() _Num = Nothing End Sub '' Accesseurs Property Numero() As Integer Get Return _Num End Get Set(ByVal Valeur As Integer) _Num = Valeur End Set End Property Property Equation(ByVal Index As Integer) As String Get Return _Equa(Index) End Get Set(ByVal Valeur As String) _Equa(Index) = Valeur End Set End Property Property Decode() As Boolean Get Return _Decode End Get Set(ByVal Valeur As Boolean) _Decode = Valeur End Set End Property ReadOnly Property DessinEqua(ByVal Index As Integer, V As Integer, H As Integer) As ClassDessinLadder Get Dim Adresse As New AdresseMatrice Adresse.AdrV = V Adresse.AdrH = H Return _DessinEqua(Index).Item(Adresse) End Get End Property '' Méthodes Friend Sub AddEqua(ByVal Equation As String) _Equa.Add(Equation) _DessinEqua.Add(Nothing) End Sub Friend Function CountEqua() As Integer Return _Equa.Count End Function Friend Sub AddLadderOpe(ByVal Index As Integer, V As Integer, H As Integer, BasGauche As Integer) Dim Adresse As New AdresseMatrice Adresse.AdrV = V Adresse.AdrH = H Dim Contact As New ClassDessinLadder(Nothing, BasGauche, Nothing, Nothing) _DessinEqua(Index).Add(Adresse, Contact) End Sub Friend Sub AddLadderContact(ByVal Index As Integer, V As Integer, H As Integer, TypeContact As Integer, NomVariable As String) Dim Adresse As New AdresseMatrice Adresse.AdrV = V Adresse.AdrH = H Dim Contact As New ClassDessinLadder(TypeContact, Nothing, Nothing, NomVariable) _DessinEqua(Index).Add(Adresse, Contact) End Sub Friend Sub MaJLadderOpe(ByVal Index As Integer, V As Integer, H As Integer, BasGauche As Integer, HautGauche As Boolean) Dim Adresse As New AdresseMatrice Adresse.AdrV = V Adresse.AdrH = H _DessinEqua(Index).Item(Adresse).HautGauche = HautGauche _DessinEqua(Index).Item(Adresse).BasGauche = BasGauche End Sub
- je récupère dans un fichier texte plein de lignes qui sont des équations booléennes (des truc d'automaticiens avec des ET et des OU)
- La structure de ce que je récupère fait que pour une équation donnée, je peux avoir 1 numéro et une équation ou 1 numéro et une série d'équations (ça, ça explique le "_Equa As New List(Of String)")
- Ensuite j'ai tout un tas de code qui marche pas trop mal et qui me fait afficher ces équations dans un datagridview, les équations sont affichées sous forme de "texte" avec plein de trucs qui se passent quand on clique sur une partie du texte
- Bon jusqu'à ce moment de mon projet, tout allait bien et je compilais l'ensemble du code sans erreur
- Maintenant mon objectif c'est de dessiner cette équation. Du coup une équation du genre "S87.[B24+B26][R24.E144+R24.E128+R61.E145+R61.E129]=R81." doit être représentée comme ça :
- Dans mon code je vais lire l'équation textuelle et la transformer en dessin (j'ai déjà le code qui marche sous excel d'où l'image). Je cherche à avoir un objet qui est le stockage de cette forme de dessin
- Au début je suis parti sur l'idée de créer une liste de tableau de 2 dimensions de taille maxi possible (les équations ont des tailles différentes qui peuvent donner des dessins plus ou moins longs et plus ou moins hauts). Bon après réflexion, je me suis dit que le coup de la liste de tableaux 2 dimensions de taille maxi (liste pour avoir un dessin par _Equa) ça ne faisait pas très langage objet
- Je décide donc de faire une classe qui contient un "carré de mon dessin" (le contact, son nom, ce qu'il faut dessiner à sa gauche immédiate): ça c'est ma ClassDessinLadder
- Ensuite pour l'utiliser facilement dans mon datagridview (et par analogie avec un tableau 2 dimensions), je le stocke dans une liste de dictionnaires où la clef est l'adresse Verticale/Horizontale du dessin, donc pour la clef je crée une structure AdresseMatrice, comme ça je peux faire toutes les opérations liées aux dictionnaires dessus.
- D'où le code dans ClassEquaSeq. Pour l'instant toutes les méthodes ne sont pas encore là mais les principales le sont.
Et là j'avoue je suis complètement sec sur le message d'erreur que j'obtient à la compilation. Je ne vois pas ce qu'il essaye de "caster".
Si quelqu'un peut me donner un petit coup de main, je suis preneur.
Merci d'avance.
Partager