Avatar billede jimgordon Nybegynder
26. juni 2006 - 15:08 Der er 3 kommentarer

Simpel custom 'checkgroupbox'

Er ved ar parre en checkbox ovenpå en groupbox til en ny kontrol kaldet checkgroupbox. Ret simpelt, alle kontroller der er contained i groupboxen skal disables, hvis der ikke er valgt i checkboxen. Og omvendt er checkboxen valgt skal alle kontrolle enables. Teksten på groupboxen kommer fra Checkboxen, der er placeret oven i der hvor groupbox.text ville have stået. Men det virker ikke helt. f.eks bliver tekst / caption ikke vist. Nogle forslag til forbedringer ?


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

namespace CheckBoxGroup
{
    public class CheckBoxGroup : GroupBox
    {
        private CheckBox checkBox;
        private string _text = "";
        private bool _enabled = true;
        private bool _checked;

        /// <summary>
        /// Initializing constructor.
        /// </summary>
        public CheckBoxGroup()
        {
            InitializeCustomComponent();

            // Make space for a entered caption.
            for (int i = 0; i < checkBox.Text.Length; i++)
                this.Text += " ";
            }

        private void UpdateState()
        {
            _checked = checkBox.Checked;

            for(int index = 0; index < this.Controls.Count; index++)
                if (this.Controls[index].Name!="checkBox")
                    this.Controls[index].Enabled = checkBox.Checked;       
        }

        /// <summary>
        /// Initial the custom component.
        /// </summary>
        private void InitializeCustomComponent()
        {
            this.checkBox = new CheckBox();
            this.SuspendLayout();
            //
            // checkGroupBox
            //
            this.Controls.Add(this.checkBox);
            this.Location = new Point(48, 32);
            this.Name = "groupBox1";
            this.TabStop = false;
            this.Text = "";
            //
            // checkBox
            //
            this.checkBox.Location = new Point(10, -8);
            this.checkBox.Name = "checkBox";
            this.checkBox.TabIndex = 1;
            this.checkBox.Size = new Size(160, 30);
            this.checkBox.Text = "groupCheckBox";
            this.checkBox.Checked = true;
            this.checkBox.CheckedChanged += new EventHandler(this.checkBox_CheckedChanged);
            this.checkBox.BringToFront();
            //
            // this
            //
            this.Text = "";
            this.ResumeLayout(false);
        }

        private void checkBox_CheckedChanged(object sender, EventArgs e)
        {
            UpdateState();
        }

        [Category("Test")]
        [Description("True if the CheckGroupBox is checked.")]
        public bool Checked
        {
            get { return _checked; }
            set { _checked = checkBox.Checked = value; }
        }

        [Category("Test")]
        [Description("Used the Checked property instead.")]
        public new bool Enabled
        {
            get { return _enabled; }
            set { _enabled = value; UpdateState();  }
        }

        [Category("Test")]
        [Description("Note text size not implemented to dynamic change of control size.")]
        //public override string Text
        public new string Text   
        {
            get { return _text; }
            set { _text = this.checkBox.Text = value; }
        }

    }
}
Avatar billede hmortensen Nybegynder
26. juni 2006 - 19:13 #1
Gør det nogen forskel at lave "public new string Text" om til "public override string Text" ?
Avatar billede Syska Mester
26. juni 2006 - 20:24 #2
nej, udover ved "new" fjener man vist muligheden for at tilgå base.Text som var den oprindelige Property, men er ik' 100% sikker....

Man kan nemlig godt tilgå den selvom du laver en override...

// ouT
Avatar billede hmortensen Nybegynder
26. juni 2006 - 20:47 #3
Som jeg forstår det, overskriver man den oprindelige egenskab med sin egen, og så burde det vel virke.
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