Avatar billede cogitans Nybegynder
09. februar 2006 - 13:36 Der er 6 kommentarer og
1 løsning

Nedarvning af control

Jeg har lavet en UserControl, som jeg gerne vil nedarve fra i en anden userControl. Men det fungerer vist ikke.
I nummer 2 control har jeg blot skrevet:
public class NedarvetControl : FirstControl1
er dette nok? Det ser lidt sådan ud i designview, for der er nedlig et ikon, som ser vellykket ud. Men selve designviewet er ikke en form eller lign.. Det er blot et stort guligt vindue. Det ligner en fejl.
En anden ting er, at jeg gerne vil tilføje en Regular Expressions på nedarvningen. Hvordan gøres dette egentlig?
Avatar billede spif2001 Nybegynder
09. februar 2006 - 15:17 #1
har du et kald til base konstruktøren i den nedarvede?

public NedarvetControl(): base()
{
  bla bla
}
Avatar billede cogitans Nybegynder
09. februar 2006 - 16:08 #2
Jeg har lavet dette:

public class NedarvetControl : CustomControl1
{
  private System.ComponentModel.Container components = null;
}
Avatar billede cogitans Nybegynder
09. februar 2006 - 16:09 #3
...og så noget andet defaultkode inde i klassen selvfølgelig...
Avatar billede spif2001 Nybegynder
10. februar 2006 - 08:09 #4
"Men selve designviewet er ikke en form eller lign.. Det er blot et stort guligt vindue. Det ligner en fejl."

Det kommer jo an på hvad din user control er. Hvis det f.eks. bare er en knap, har den jo ikke nogen form at vise den på i design view. 

Prøv at proppe din user control på en form og se hvad der sker.
Avatar billede cogitans Nybegynder
10. februar 2006 - 11:13 #5
Koden ser sådan ud for basecontrol:

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace LabelBoxControl
{
    public class CustomControl1 : System.Windows.Forms.Control
    {
        public System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Label label1;

        private System.ComponentModel.Container components = null;

        public CustomControl1(){
            InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if( components != null )
                    components.Dispose();
            }
            base.Dispose( disposing );
        }

        #region Component Designer generated code
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();

            this.textBox1.Location = new System.Drawing.Point(17, 17);
            this.textBox1.Name = "textBox1";
            this.textBox1.TabIndex = 0;
            this.textBox1.Text = "Skriv her!";
            this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);

            this.label1.Location = new System.Drawing.Point(17, 54);
            this.label1.Name = "label1";
            this.label1.TabIndex = 0;
            this.Controls.Add(textBox1);
            this.Controls.Add(label1);
        }
        #endregion

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }

        private void textBox1_TextChanged(object sender, System.EventArgs e)
        {
            label1.Text=textBox1.Text;
        }
    }
}

Sådan for nedarvet control:

using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace LabelBoxControl
{
    public class NedarvetControl : CustomControl1
    {
        private System.ComponentModel.Container components = null;

        public NedarvetControl() : base()
        {
            InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Component Designer generated code
        private void InitializeComponent()
        {
            this.textBox1.Location = new System.Drawing.Point(17, 17);
            this.textBox1.Name = "textBox1";
            this.textBox1.TabIndex = 0;
            this.textBox1.Text = "Skriv her!";
            this.textBox1.Validating += new System.ComponentModel.CancelEventHandler(this.textBox1_Validating);
            //
            // NedarvetControl
            //
            this.Controls.SetChildIndex(this.textBox1, 0);

        }
        #endregion

        private void textBox1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if(sender.GetType()==typeof(TextBox))
            {
                char[] streng=e.ToString().ToCharArray();;
                for(int i=0; i<streng.Length; i++)
                {
                    if((int)streng[i]<97||(int)streng[i]>122)
                    {
                        e.Cancel=true;
                    }
                }
            }
        }
    }
}

Og sådan for implementeringen:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace LabelBoxTest
{

    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.ColorDialog colorDialog1;
        private LabelBoxControl.NedarvetControl customControl11;
        private System.Windows.Forms.Label label1;

        private System.ComponentModel.Container components = null;

        public Form1()
        {
            InitializeComponent();
        }

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code

        private void InitializeComponent()
        {
            this.colorDialog1 = new System.Windows.Forms.ColorDialog();
            this.customControl11 = new LabelBoxControl.NedarvetControl();
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();

            this.customControl11.Location = new System.Drawing.Point(64, 16);
            this.customControl11.Name = "customControl11";
            this.customControl11.Size = new System.Drawing.Size(152, 216);
            this.customControl11.TabIndex = 0;
            this.customControl11.Text = "customControl11";

            this.label1.Location = new System.Drawing.Point(88, 72);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(104, 144);
            this.label1.TabIndex = 1;
            this.label1.Visible = false;

            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.customControl11);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);

        }
        #endregion

        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
        }
    }
}
Avatar billede cogitans Nybegynder
10. februar 2006 - 11:53 #6
Jeg har puttet en ErrorProvider på, men den ser ikke ud til at fungere. Jeg har lidt på fornemmelsen, at systemet ikke kører den sidst nye version af projektet...
Avatar billede cogitans Nybegynder
19. august 2006 - 17:49 #7
I mangel af bedre lukkes spørgsmålet nu efter frivillig tvang...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester