C #: hashtable de liaison à la question de la boîte à options
-
05-07-2019 - |
Question
public class FontType
{
...
public String Name { get { return _name; } }
public String DisplayName { get { return _displayName; } }
public Font UseFont { get { return _font; } }
}
bindFontTypes.DataSource = availableFonts;
comboFontType.DataSource = bindFontTypes;
comboFontType.ValueMember = "Key";
comboFontType.DisplayMember = ...???;
Ici, bindFontTypes
est BindingSource. availableFonts
est une table de hachage où les clés sont des chaînes et les valeurs des objets de FontType. Pour comboFontType.DisplayMember
, je souhaite utiliser la propriété .DisplayName des objets. Comment puis-je spécifier cela? Est-ce possible?
La solution
Cela pourrait fonctionner si vous définissiez
comboFontType.DisplayMember = "Value"; // FontType
et surchargez ToString ()
pour FontType
.
Comme alternative à ToString (), vous pouvez gérer l'événement Format de la liste déroulante.
Mais je ne suis même pas sûr que la liaison de données fonctionne de cette façon.
Autres conseils
En utilisant DisplayMember = " Value.DisplayName "
, je reçois le dernier élément ajouté à la table de hachage ... Je tente de les obtenir tous ....
C’est ce que j’ai fait ... mais je ne récupère que le dernier élément de la Hashtable à lier ....
BindingSource src = new BindingSource();
src.DataSource = new Hashtable
{
{
"blah",
new FontType
{
Name = "newFont",
DisplayName = "new Font"
}
},
{
"another",
new FontType
{
Name = "anotherFont",
DisplayName = "another Font"
}
}
};
comboBox1.DataSource = src;
comboBox1.ValueMember = "Key";
comboBox1.DisplayMember = "Value.DisplayName";