PropertyGrid : obtenir une dropdown

romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 - 11 août 2006 à 10:26
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre 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

++
A voir également:

10 réponses

Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
11 août 2006 à 10:45
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
0
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
11 août 2006 à 10:50
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à
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
11 août 2006 à 11:05
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#]
0
Bubuss Messages postés 147 Date d'inscription samedi 7 juin 2003 Statut Membre Dernière intervention 8 décembre 2007
11 août 2006 à 11:29
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
11 août 2006 à 23:22
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
++
0
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
11 août 2006 à 23:37
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"
0
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
12 août 2006 à 11:48
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");
        }
    }
}

+
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 août 2006 à 10:49
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#]
0
medodev Messages postés 10 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 20 avril 2012
15 avril 2010 à 15:58
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;}
}
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
16 avril 2010 à 05:52
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
0
Rejoignez-nous