Héritage ToolStripMenuItem et InvalidCastException
BGA23
Messages postés6Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention 3 juin 2008
-
2 juin 2008 à 16:31
BGA23
Messages postés6Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention 3 juin 2008
-
3 juin 2008 à 11:32
BGA23
Messages postés6Date d'inscriptionmercredi 19 février 2003StatutMembreDernière intervention 3 juin 2008 2 juin 2008 à 16:44
Je vais y arriver, si si...
Bonjour.
J'essaie de créer un ToolStripMenuItem avec une nouvelle propriété "Fonction" (de type String).
Public Class MyMenuItem
Inherits ToolStripMenuItem
Private mvarFonction As String
Public Property Fonction() As String
Get
Return mvarFonction
End Get
Set(ByVal value As String)
mvarFonction = value
End Set
End Property
Public Sub New(ByVal texte As String, ByVal Fonction As String)
MyBase.New(texte)
mvarFonction = Fonction
End Sub
Public Sub New(ByVal texte As String)
MyBase.New(texte)
End Sub
End Class
Au chargement de mon formulaire, je crée le MenuStrip et le premier item :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyMenu As New MenuStrip
Dim MyItem As MyMenuItem
'MyItem = New MyMenuItem("Mon premier menu", "Test")
'MyMenu.Items.Add(MyItem)
MyItem = MyMenu.Items.Add("Mon premier menu")
MyItem.Fonction = "Test"
Me.MainMenuStrip = MyMenu
Me.Controls.Add(MyMenu)
End Sub
J'obtiens une erreur "InvalidCastException" sur la ligne MyItem = MyMenu.Items.Add
(Message="Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.ToolStripMenuItem' en type 'TestMenu.MyMenuItem'.")
En revanche, le code suivant fonctionne :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyMenu As New MenuStrip
Dim MyItem As MyMenuItem
MyItem = New MyMenuItem("Mon premier menu", "Test")
MyMenu.Items.Add(MyItem)
'MyItem = MyMenu.Items.Add("Mon premier menu")
'MyItem.Fonction = "Test"
Me.MainMenuStrip = MyMenu
Me.Controls.Add(MyMenu)
End Sub
Et donc, je me demandais pourquoi ca marche dans un cas et pas dans l'autre ?!
Si quelqu'un pouvait m'éclairer de ces lumières et éventuellement me dire comment faire pour que la 1ere méthode fonctionne, je lui en serais très reconnaissant.
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 2 juin 2008 à 17:08
Salut,
Oui c'est normal. La fonction MyMenu.Items.Add retourne un ToolStripMenuItem, mais un simple ToolStripMenuItem ne peut pas être "transformé" en MyMenuItem.
MyItem = MyMenu.Items.Add("Mon premier menu")
' On essaie de "tranformer" un ToolStripMenuItem en MyMenuItem -> impossible
Si tu veux créer un MyMenuItem, tu dois utiliser son constructeur pour le créer, c'est pourquoi ceci fonctionne:
MyItem = New MyMenuItem("Mon premier menu", "Test")
MyMenu.Items.Add(MyItem)
C'est plus clair non?
Il n'y a pas moyen de créer une méthode ou un convertisseur sur MyMenuItem ? Du genre "ConvertToToolStripMenuItem" ?
Si je crois bien, mais je ne sais pas le faire
Je me casse bien la tête pour pas grand chose...
Effectivement, l'utilisation du contructeur de ton MyMenuItem te rajoute une seule ligne dans ton code
Mais en plus, si tu veux accéder aux fonctions ajoutées de tes MyMenuItem dans ton menu par la suite, tu devra faire un cast ToolStripMenuItem => MyMenuItem (dans ce cas ça fonctionnera, car ToolStripMenuItem est en fait un MyMenuItem)