[.NET] Visual inheritance met een rare quirck

Pagina: 1
Acties:

Onderwerpen


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:23
Ik heb een base-form gemaakt (BaseOkCancelButtonForm) die 2 buttons bevat: een Ok button, en een Cancel button.
Deze base form heeft ook een aantal properties, die er als volgt uit zien:

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
        [Browsable (true)]
        [Category ("Design")]
        [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)]
        public string OkButtonText
        {
            get
            {
                return btnOk.Text;
            }
            set
            {
                btnOk.Text = value;
            }
        }

        [Browsable (true)]
        [Category ("Design")]
        [DefaultValue (true)]
        [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)]
        public bool OkButtonVisible
        {
            get
            {
                return btnOk.Visible;
            }
            set
            {
                btnOk.Visible = value;
            }
        }

        [Browsable (true)]
        [Category ("Design")]
        [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)]
        public string CancelButtonText
        {
            get
            {
                return btnCancel.Text;
            }
            set
            {
                btnCancel.Text = value;
            }
        }

        [Browsable (true)]
        [Category ("Design")]
        [DefaultValue (true)]
        [DesignerSerializationVisibility (DesignerSerializationVisibility.Visible)]
        public bool CancelButtonVisible
        {
            get
            {
                return btnCancel.Visible;
            }
            set
            {
                btnCancel.Visible = value;
            }
        }


De buttons (btnOk & btnCancel) zijn beiden private op de form.

Als ik nu een form afleid van deze base-form, en ik zet de CancelButtonText property in de designer op een andere waarde, en ik rebuild het project, dan loopt alles zoals verwacht: de Text property van de Cancel Button blijft op de waarde staan die ik toegekend heb.

Doe ik echter hetzelfde met de CancelButtonVisible property, dan loopt het mis. Als ik deze property op false zet, dan zie ik in de designer wel dat die button invisible wordt (maw, ik zie hem niet meer).
Echter, als ik het project opnieuw build, dan is die property terug op true gezet. :?

Als ik echter de btnOk & btnCancel buttons protected maak ipv private, dan werkt die CancelButtonVisible property wel.
Echter, dit zou imho helemaal niet hoeven te gebeuren; ik zou die button niet protected moeten maken (en dat wil ik trouwens ook niet).

Dus, waarom werkt de Visible property niet zoals verwacht, terwijl andere properties dat wel doen :?
En nog beter: hoe kan ik het oplossen ?

Ik kan er natuurlijk wel rondwerken, door in de constructor van m'n sub-form die property te gaan zetten, en deze properties niet meer zichtbaar te maken in het property window (door de Browsable attribute op false te zetten), maar ik zou het toch liever op een andere manier oplossen. :P

https://fgheysels.github.io/


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 10-09 11:15
Het verschil tussen je twee dingen is natuurlijk dat je op de Visible properties een DefaultValue hebt staan. Als je dat eraf haalt, heb je dan nog steeds het probleem?

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • whoami
  • Registratie: December 2000
  • Laatst online: 13:23
riezebosch schreef op donderdag 13 augustus 2009 @ 17:38:
Het verschil tussen je twee dingen is natuurlijk dat je op de Visible properties een DefaultValue hebt staan. Als je dat eraf haalt, heb je dan nog steeds het probleem?
Yep.
Deze DefaultValue property doet eigenlijk niet terzake; dit wordt gebruikt om in het property window te kunnen duidelijk maken als de waarde van de property gewijzigd is ( maw: niet gelijk aan de defaultvalue); dan staat de waarde van die property in het vet.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:23
subtiele kick

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 01-09 22:18
Heb ik ook wel eens gehad met een Infragistics control. Zoek in de Form.Designer.cs het blok code op waar de properties van die control gezet worden en zet daar control.CancelButtonVisible = false.
Kijken of hij nu wel goed blijft staan.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 13:23
Da's een beetje een vieze work-around, vind je ook niet. :)
Dan heb ik nog liever mijn voorlopige oplossing.

Wat ik wel eens zou willen weten , is waarom dit niet werkt zoals verwacht.

https://fgheysels.github.io/

Pagina: 1