PropertyGrid : obtenir une dropdown

Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
- - Dernière réponse : sebmafate
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
- 16 avril 2010 à 05:52
Bonjour


je suis toujours sur le composant propertygrid lool


bon la en fait j'essaie d'avoir pour une propriete en fait une dropdown personnalisée


mais j'ai un peu de la peine je n'arrive pas a obtenir une dropdown, je dois pourtant pas en etre loin


voila mon code



public


class
kind : System.Drawing.Design.UITypeEditor
{
   
public


const


string
TypeDeclaration
=


"
type decl
"
;
   
public


const


string
MethodDeclaration
=


"
method decl
"
;
   
public


const


string
MethodBody
=


"
method body
"
;
   
public


const


string
Unspecified
=


""
;

   
public
kind()
    {
        GetEditStyle();
    }

   
public
override Drawing.Design.UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
    {
       
return
Drawing.Design.UITypeEditorEditStyle.DropDown;
    }

   
public
override
object
EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider,
object
value)
    {
        ComboBox a
=


new
ComboBox();
        a.Items.Add(
"
a
"
);
        a.Items.Add(
"
a
"
);
        a.Items.Add(
"
a
"
);
        a.Items.Add(
"
a
"
);
       
return
value;
    }
}

ptetre que Sebmafate sorai ?
merci pour votre precieuse aide

++
Afficher la suite 

10 réponses

Messages postés
147
Date d'inscription
samedi 7 juin 2003
Statut
Membre
Dernière intervention
8 décembre 2007
0
Merci
Tu est pas si pret que ça lol
Il faut que tu fasse une classe enum pour obtenir une dropdown car l'editeur par défaut de vs est un éditeur type drop down
si tu ve une dropdown liste personnalisable dynamiquement par l'utilisateur pourquoi n'utilise tu pas un List<MonObjet> car celà revien au même que de créer des objets
Commenter la réponse de Bubuss
Messages postés
147
Date d'inscription
samedi 7 juin 2003
Statut
Membre
Dernière intervention
8 décembre 2007
0
Merci
Excuse moi j'ai oublié de te passer un exemple :
public enum MaDropDown
{
   monchoixA,
   monchoixB,
}

et dans ton objet la propriété :

private MaDropDown _maProp = MaDropDown.monchoixA;
[DefaultValue(MaDropDown.monchoixA)]
public MaDropDown maProp
{
get{...}
set{...}
}

Voilà
Commenter la réponse de Bubuss
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
0
Merci
hum... bubuss... parfois il est préférable de se taire :)
tu peux créer une dropdownlist liste avec n'importe quoi dedans... la preuve VS le fait en remplissant des combos avec la liste des controles... ce n'est pas une enum ca...

ce qu'à oublier romagny c'est de lier son combobox avec le propertygrid.

regarde cette source http://www.csharpfr.com/codes/UTILISATION-PROPERTYGRID_33953.aspx, et plus précisément la classe EnumEditor

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
Messages postés
147
Date d'inscription
samedi 7 juin 2003
Statut
Membre
Dernière intervention
8 décembre 2007
0
Merci
Exact, je n'ai peut être pas comprit que remagny13 cherchait à créer son Editeur avec une source dynamique car dans son code il y a :
"
        ComboBox a =newComboBox();
        a.Items.Add("a");
        a.Items.Add("a");
        a.Items.Add("a");
        a.Items.Add("a");
        returnvalue;
"
C'est pour cette raison que je lui est donné cette solution pour lui faire gagner du temps
Commenter la réponse de Bubuss
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2
0
Merci
oui c'est vrai on peut utiliser enum qui genere automatiquement une combobox


mais dans mon cas je peux pas l'utiliser vu que mes constantes contiennent des espaces


ouai javais telecharger la source de sebmafate et justement c grace a lui si jai deja pu mettre le bout de code tout en haut
mais la je nage un peu pi cest tellemnent bien les forums ptdrrr ils te pondent le truc des fois tas mm po besoin de te creuser la tete lool
mais bon la je v devoir me pencher un peu plus serieusement sur la chose

merci pour vos tuyaux si fous en avez dautres lool vous genez po

merci
++
Commenter la réponse de romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2
0
Merci
En fait ce que je desire c juste pouvoir lister ds une combobox  (ds le propertygrid) des elements qui ont des espaces
ex : "method body"
Commenter la réponse de romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2
0
Merci
wa vous pourriez po m'aider
la jai utiliser la methode decrite ds la source de Sebmafate, mais jai un pb,qd je clique sur la combox ds le propertygrid il ouvre comme une deuxieme combox juste en dessous , de plus la valeur selectionnee ne saffiche pas ds le champ de la combox lorsque celle-ci est "repliée"

voila mon code
1 - ds ma classe
 private kind _mKind;

        [CategoryAttribute("Snippet"), DescriptionAttribute("Portée ou emplacement du bout de code dans le code complet d'un programme"), DisplayName("Kind"), DefaultValueAttribute("")]
        [Editor(typeof(kind), typeof(Drawing.Design.UITypeEditor))]
        public kind codedata {
            get {
                return _mKind;
            }
            set {
                _mKind = value;
            }

2 -
                          

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Windows.Forms;
using System.Windows.Forms.Design;
namespace PropertyGrid2.Editors
{
    publicclass EnumEditor : UITypeEditor
    {

        public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
        {
            return UITypeEditorEditStyle.DropDown;
        }

        public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            IWindowsFormsEditorService edSvc;
            edSvc = ((IWindowsFormsEditorService)(provider.GetService(typeof(IWindowsFormsEditorService))));
            if (!((edSvc == null))) {
                ComboBox lb =new ComboBox();
                lb.Items.Add("unspecified");
                lb.Items.Add("method dcl");
                lb.Items.Add("method body");
                lb.SelectedIndex =0;
                edSvc.DropDownControl(lb);
            }
            return value;
        }

        private bool EnumContainsValue(Type enumType, object enumValue, object value)
        {
            Type systemType = System.Enum.GetUnderlyingType(enumType);
            return (((object)(enumValue)));
            thrownew Exception("Type incompatible");
        }
    }
}

+
Commenter la réponse de romagny13
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
0
Merci
tu as pris pas mal de raccourcis par rapport à ma source ;) (ex: !((edSvc == null)) --> edSvc != null)

et la méthode EnumContainsValue n'est pas nécessaire pour toi :p

bref... comment récupères-tu la liste d'items pour alimenter ton combo ?

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
Messages postés
10
Date d'inscription
vendredi 10 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2012
0
Merci
Je vois ton pb en utilisant cet exemple tu devrais arrivé à ce que tu cherche


public class MyConverter: StringConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return true;
}

public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(new string[] { "entry1", "entry2","entry3" });
}

}




Exemple d'utilisation
private string _myProp = "entry1";
[Browsable(true)]
[DefaultValue("entry1")]
[CategoryAttribute("Behavior")]
[TypeConverter(typeof(MyConverter))]
public string MyProp
{
get{ return _myProp ;}
set{ _myProp = value;}
}
Commenter la réponse de medodev
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
0
Merci
j'espère qu'après 4 ans Romagny a résolu sont problème :p

Sébastien FERRAND
Lead Developpeur
Microsoft Visual C# MVP 2005 - 2009
Commenter la réponse de sebmafate