[x]
Posted via EE Mobile

Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again.

Question
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

8.8

Custom property desinger is not updating collection properties

Asked by dbrckovi in Microsoft Visual C#.Net, .Net Editors & IDEs, .NET

Tags: property designer, ComponentModel, custom property, UITypeEditor, TypeConverter

Hi!

I have created a class with a few simple properties (int, Color) and one complex property (List<>)
I have added this class to my user control as its property,so now my control looks something like this:

MyControl
   .MyClass
      .SomeNumber
      .SomeColor
      .SomeList
           .ListItem
           .ListItem

I have created a property designer for this class and by using it I can change any simple values of type Color, Int, etc., but if I try to modify items in the List<> property, it just ignores it. I can't add or remove anything in the list.  

What am I doing wrong here? Why is my editor updating simple properties but doesn't clear items in the list?

I'll paste some most important pieces of code in the code snippet but please note its not the complete code. Only most important pieces which show how are different objects declared.

If you need entire sollution, please say so. I will upload it somewhere.

Thank you!
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
//this is the class I'm using as a property on my control
    [TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
    [Editor(typeof(Editors.DBBackgroundInfoEditor), typeof(System.Drawing.Design.UITypeEditor))]
    public class DBBackgroundInfo
    {
        public Color BackgroundSolidColor;
        public Color GradientStartColor;
        public Color GradientEndColor;
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [ReadOnly(true)]
        public List<DBGradientStep> Steps;
    }
 
 
 
 
 
//this is the class which is stored in List<> property
    [TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
    public class DBGradientStep
    {
        public Color Color;
        public int Position;
    }
 
 
 
 
//this is the instance of the DBBackgroundInfo class on my control              
        [ReadOnly(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public DBBackgroundInfo BackgroundInfo;
 
 
 
 
//this is my custom type editor
    public class DBBackgroundInfoEditor : UITypeEditor
    {
        public override UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
        {
            if (context != null)
            {
                return UITypeEditorEditStyle.Modal;
            }
            return base.GetEditStyle(context);
        }
 
        public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            if ((context != null) && (provider != null))
            {
                IWindowsFormsEditorService editorService = (IWindowsFormsEditorService) provider.GetService(typeof(IWindowsFormsEditorService));
                if (editorService != null)
                {
                    DBBackgroundInfoEditorForm modalEditor = new DBBackgroundInfoEditorForm();
                    modalEditor.EditingValue = (DBBackgroundInfo)value;
                    if (editorService.ShowDialog(modalEditor) == DialogResult.OK)
                    {
                        return modalEditor.EditingValue;
                    }
                }
            }
            return base.EditValue(context, provider, value);
        }
    }
 
 
 
//this is how DBBackgroundInfo is handled on the form which I use as property designer
    public partial class DBBackgroundInfoEditorForm : Form
    {
        private DBBackgroundInfo editingValue = null;
        public DBBackgroundInfo EditingValue
        {
            get
            {
                return editingValue;
            }
            set
            {
                editingValue = value;
            }
        }
 
        private void btnOK_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.OK;
 
            editingValue.Steps.Clear();
            editingValue.BackgroundFillMode = copiedValue.BackgroundFillMode;
            editingValue.BackgroundSolidColor = copiedValue.BackgroundSolidColor;
            editingValue.GradientEndColor = copiedValue.GradientEndColor;
            editingValue.GradientStartColor = editingValue.GradientStartColor;
 
            this.Close();
        }
    }
[+][-]10/08/09 09:37 PM, ID: 25532329Accepted Solution

View this solution now by starting your 30-day free trial. Setting up your free trial is quick, easy, and secure. We will return you to this solution, unlocked, when you're done.

About this solution

Zones: Microsoft Visual C#.Net, .Net Editors & IDEs, .NET
Tags: property designer, ComponentModel, custom property, UITypeEditor, TypeConverter
Sign Up Now!
Solution Provided By: apeter
Participating Experts: 1
Solution Grade: A
 
[+][-]11/12/09 05:31 PM, ID: 25810611Administrative Comment

Experts Exchange has a courteous staff of administrators who help members get the most out of the website by means of administrative comments like this one.

Start your 30-day free trial to view this Administrative Comment or ask the Experts your question.

 
 
Loading Advertisement...
20091111-EE-VQP-92 - Hierarchy / EE_QW_EXPERT_20070906