Toon posts:

[C#] Attributen van custom control niet kopieëren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met wat experimenteren met custom controls in C#. Hierover heb ik de volgende vraag.

Als ik mijn custom control in VS 2005 vanuit de lijst met controls middels sleur-pleur op mn formulier deponeer, wordt alle code uit de InitializeComponent methode óók in de code van het formulier gezet. Dit is echter helemaal niet nodig, aangezien de control deze properties 'gewoon' uit mn object moet kunnen halen. Hoe kan ik voorkomen dat dat gebeurd?


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
using System.Windows.Forms;
using System.ComponentModel;

namespace OpMaat.Systeem.Controls
{
    public class standaardButton : System.Windows.Forms.Button
    {
        public standaardButton()
        {
            InitializeComponent();
        }
        [Browsable(false)]
        public override System.Drawing.Font Font
        {
            set
            {
                base.Font = this.Font;
            }
            get{
                return base.Font;
            }
        }
        [Browsable(false)]
        public override System.Drawing.Color BackColor
        {
            set
            {
                base.BackColor = this.BackColor;
            }
            get
            {
                return base.BackColor;
            }
        }
        private void InitializeComponent()
        {
            base.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
            base.Font = OpMaat.Systeem.Controls.Fonts.StandaardFont();
            base.FlatAppearance.BorderColor = System.Drawing.Color.Black;
            base.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
            base.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255)))));
            base.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            base.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
            base.UseVisualStyleBackColor = false;
        }
    }
}


Alvast bedankt!

  • Exterazzo
  • Registratie: Mei 2000
  • Laatst online: 21:44

Exterazzo

Qeasy

Ik ben niet zo'n custom control guru, maar als je de code uit InitializeComponent haalt en gewoon de contructor neerplempt? InitializeComponent is een gegeneerde methode toch door VS?

In ieder geval als ik het goed heb begrepen, wordt de code uit InitializeComponent toegevoegd aan de Formnaam.Designer code of begrijp ik het verkeerd?

Audentia


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

InitializeComponent is de naam van een standaard gegenereerde method. Heb je deze code zelf toegevoegd, of is dit ook autogenerated. In het eerste geval is het dan misschien verstandig om een andere naam te kiezen.

Verwijderd

Topicstarter
PhysicsRules schreef op maandag 20 november 2006 @ 16:38:
InitializeComponent is de naam van een standaard gegenereerde method. Heb je deze code zelf toegevoegd, of is dit ook autogenerated. In het eerste geval is het dan misschien verstandig om een andere naam te kiezen.
Als ik de code rechtstreeks in de constructor plaats, wordt de code ook toegevoegd aan de InitializeComponent methode van het formulier.

Wat ik eigenlijk voor elkaar wil krijgen is dat de instanties van de standaardButton class makkelijk te veranderen zijn van opmaak enz. zonder dat ik dan elke control appart moet aanpassen. Of is hier ook een andere manier voor?

  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 31-03 07:26

PhysicsRules

Dux: Linux voor Eenden

WPF in .Net 3.0. Dat is daarvoor ontworpen. Als je de kans hebt kun je je daarin verdiepen.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Als je controls aan wil passen kun je ook at runtime door de Controls collectie heen te loopen en te kijken of het gevonden control van het type is dat jij wilt en dan daar de properties van aanpassen.
Maar zoals PhysicsRules al aangeeft als je voor WPF kunt gaan zou ik dat zeker doen.

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
Ik ben nu bezig geweest met het verkennen van WPF. Erg mooie oplossing, dat gaat ongetwijfelt de opvolger worden van WinForms. Vooral dat je je interface ook meteen op het web kunt zetten en deze volledig is gescheiden van de code is ideaal.

Echter, het is wel duidelijk dat dit nog in ontwikkeling is. Er is bijvoorbeeld nog niet eens een datagrid control beschikbaar. Het lijkt daarom voor ons niet praktisch te zijn.

Maar als ik het goed begrijp is er geen mogelijkheid om een soort stylesheet te gebruiken voor winforms elementen?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Sterker nog WPF is de opvolger van winforms. Het feit dat er geen datagrid is betekend niet dat die functionaliteit weg is. De ListView control icm templates is een stuk krachtiger en flexibeler dan het DataGrid.

Voor WinForms zijn er geen stylesheets tenzij je zelf daar logica voor ontwerpt.

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
Zijn er website's waar duidelijk wordt uitgelegd hoe dit werkt? Ik heb ze zelf niet kunnen vinden.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

ListView met ControlTemplates?
Het beste is denk ik de Windows SDK te downloaden en je eerst goed in te lezen in hoe WPF met templates werkt.
Verder kun je ook nog kijken op MSDN en Google natuurlijk.

[ Voor 17% gewijzigd door MTWZZ op 22-11-2006 16:27 ]

Nu met Land Rover Series 3 en Defender 90

Pagina: 1