[C#] Inhoud van property wijzigen in setter andere property

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
Hallo allemaal,

Ik heb een Component in C# met daarin twee properties, Property1 en Property2. Property2 is een verzameling (List<T>) van objecten die ook gedefinieerd zijn in mijn code.

Nu wil ik graag tijdens het zetten van Property1 de inhoud van de List<T> van Property2 wijzigen. Dit werkt op zich wel alleen worden deze wijzigingen niet opgeslagen in de Designer.cs van het Form waarop ik het component plaats.

Weet iemand hoe ik dit voor elkaar kan krijgen?

Kort voorbeeld van hoe ik het nu heb:
C#:
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
    public class TestComponent : Component
    {
        private int _Count;
        public int Count
        {
            get { return _Count; }
            set 
            { 
                _Count = value;

                Columns.Clear();

                for (int i = 0; i < _Count; i++)
                {
                    TestClass tClass = new TestClass();
                    tClass.Description = "TestClass" + i.ToString();
                    Columns.Add(tClass);
                }
            }
        }

        private List<TestClass> columns = new List<TestClass>();
        [EditorBrowsable(EditorBrowsableState.Never)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public List<TestClass> Columns 
        { 
                get { return columns; } 
        }
    }

    [ToolboxItem(false), DesignTimeVisible(false)]
    public class TestClass : Component
    {
        private string _Description;
        public string Description
        {
            get { return _Description; }
            set { _Description = value; }
        }
    }


Als de count gezet wordt dan worden er net zoveel objecten aangemaakt als de count. Dit werkt op zich wel, en de aangemaakte objecten zijn ook zichtbaar in de Designer van Visual Studio, alleen als het project gestart wordt zijn de aangemaakte objecten weg omdat die niet in de Designer.cs geserialized worden.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • SaphuA
  • Registratie: September 2005
  • Laatst online: 10-09 22:00
.

[ Voor 118% gewijzigd door SaphuA op 01-02-2022 14:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb een WinForms applicatie gemaakt, hier heb ik jou component op gesleept en ingesteld en dit werkt naar behoren werk jij ook met een WinForms applicaitie?

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
@SaphuA: De waarde van Count wordt juist wel geserialized naar de Designer.cs code:

C#:
1
2
3
4
// 
// testComponent1
// 
this.testComponent1.Count = 6;


Het probleem is dat de inhoud van de List<T> niet geserialized wordt. Als ik handmatig een item toevoeg via de designer wordt de designer dit:

C#:
1
2
3
4
5
// 
// testComponent1
// 
this.testComponent1.Columns.Add(this.testClass3);
this.testComponent1.Count = 6;


Met de code die ik gegeven heb gebeurt dit dus niet.

@D32: Ik werk ook met een WinForms applicatie. De code die ik gaf was een kort voorbeeld en komt niet helemaal overeen. Mijn hoofdprobleem is dus dat als ik de Columns collectie vul vanuit de Count property setter dat dit niet geserialized wordt in de Designer.cs terwijl als ik handmatig een item aanmaak via de collection editor dit wel gebeurd.

[ Voor 3% gewijzigd door urk_forever op 20-04-2011 12:23 ]

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
Ik heb het al gevonden, ik moest de volgende regel nog toevoegen:

C#:
1
this.Container.Add(tClass);


Dus de code voor het zetten van Count ziet er nu zo uit:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        private int _Count;
        public int Count
        {
            get { return _Count; }
            set 
            { 
                _Count = value;

                Columns.Clear();

                for (int i = 0; i < _Count; i++)
                {
                    TestClass tClass = new TestClass();
                    tClass.Description = "TestClass" + i.ToString();
                    Columns.Add(tClass);
                    this.Container.Add(tClass);
                }
            }
        } 


Nu worden de gegenereerde classes wel toegevoegd aan de Designer.cs.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

Verwijderd

Ja en dan kijk je daar zo overheen. Goed dat het werkt.
Pagina: 1