VB.NET: La collection Items (Add, Remove, Clear, ...) pour Control !!!!!

mehdi146 Messages postés 8 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 mai 2005 - 19 mai 2005 à 15:18
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 19 mai 2005 à 22:05
Bonjour,

Je travaille sur la migration d'un logiciel de VB6 à VB.NET.

Je résume le problème :
En VB6, lorsque je déclare un contrôle dont je ne connais pas le type (Dim Ct As Control), ce dernier possède les propriétés AddItem, RemoveItem, ListCount, Clear, ... quel que soit le type de ce contrôle (ComboBox, ListBox, TextBox, Label, ...).
En VB.NET, Les équivalents de ces propriétés sont Add, Remove, Count et Clear qui se trouvent tous regrouper dans la collection "Items".Cependant cette collection Items n'est pas un membre de System.Windows.Forms.Control mais seulement de ListBox et ComboBox. Le problème est donc que lorsqu'on ne connaît pas le type du contrôle sur lequel on travaille, on ne peut pas utiliser la collection "Items" et donc on ne peut pas utiliser les propriétés citées auparavant.

Voici un exemple:
Supposons qu'on ait une fonction qui a pour paramètre cb qui est déclaré comme étant un contrôle (cb As System.Windows.Forms.Control) car on ne connait pas son type. Je désire faire :


If
TypeOf cb Is System.Windows.Forms.ComboBox Then

cb.Visible =
True



cb.Items.Clear()


End If


If TypeOf cb Is System.Windows.Forms.Label Then


cb.Visible = True


cb.Text = ""


End If


Le problème est que comme j'ai déclaré cb en tant que contrôle alors Items n'est pas un membre de cb et je ne peux donc pas faire " cb.Items.Clear() " .

Voilà, j'espere que j'ai été assez clair. Si vous avez la moindre idée de comment résoudre ce problème, n'hesitez surtout pas à m'en faire part.

Merci d'avance
A voir également:

2 réponses

mehdi146 Messages postés 8 Date d'inscription mardi 8 mars 2005 Statut Membre Dernière intervention 19 mai 2005
19 mai 2005 à 15:57
Je voudrais rajouter que pour d'autres exemples moins complexe, le problème se pose quand même.
Je m'explique : Comme je l'ai dit précédemment, la collection Items appartient aux 2 classes ComboBox et ListBox. Supposons que maintenant j'ai une fonction dont le paramètre est un contrôle mais qu'on sait que ce contrôle est soit un ComboBox soit un ListBox. J'ai réussit à trouver une classe qui je cite "Fournit une implémentation commune pour les classes ListBox et ComboBox". Cette classe est System.Windows.Forms.ListControl.
Malheureusement, même si je déclare mon contrôle en tant que ListControl, mon problème n'est pas résolu pour autant car Items n'est pas membres de System.Windows.Forms.ListControl !!!!!!!!!!!!!!!!
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
19 mai 2005 à 22:05
salut





Un truc que je ne comprends pas c'est que tes comtroles en VB 6 ont additem

car chez moi ca plante ???



voila un petit code

a adapté a ton programme



imports system.reflexion





Shared Sub Main()

Dim b As Button

b = New Button



Dim c As ComboBox

c = New ComboBox



Dim t As Reflection.PropertyInfo()

t = b.GetType.GetProperties()

For Each a As PropertyInfo In t

Console.WriteLine(a.Name)

If a.Name.ToUpper.Equals("Items".ToUpper) Then

MessageBox.Show(" b contient items")

End If

Next







t = c.GetType.GetProperties()

Console.WriteLine("")





For Each a As PropertyInfo In t

Console.WriteLine(a.Name)

If a.Name.ToUpper.Equals("Items".ToUpper) Then

MessageBox.Show(" c contient items")

End If

Next



voila bonne prog
0
Rejoignez-nous