简体   繁体   中英

Multiple CheckedChanged event on programmatically added checkboxes

I want to be able to assign each checkbox to it's own richtextbox

I'm making the richtextboxes, then I'm making the checkboxes but how can I "link" them together?

for example :

        // richtextbox 1 - > checkbox 1 = false
        // richtextbox 2 - > checkbox 2 = true
        // richtextbox 3 - > checkbox 3 = true
        // richtextbox 4 - > checkbox 4 = false

this is my code:

int n = TodoItems.Count;
        RichTextBox[] RichtextBoxes = new RichTextBox[n];
        CheckBox[] Checkboxes = new CheckBox[n];
        for (int i = 0; i < n; i++)
        {
            //creating the richtextbox
            RichtextBoxes[i] = new RichTextBox();
            RichtextBoxes[i].Name = "TB" + i.ToString();
            RichtextBoxes[i].Text = TodoItems[i].ToString();
            RichtextBoxes[i].Location = new System.Drawing.Point(130, (10 + (60 * i)));
            RichtextBoxes[i].Size = new System.Drawing.Size(300, 50);
            RichtextBoxes[i].Visible = true;
            RichtextBoxes[i].ReadOnly = true;
            RichtextBoxes[i].SelectionAlignment = HorizontalAlignment.Center;
            RichtextBoxes[i].BackColor = Color.White;
            TodoList.Controls.Add(RichtextBoxes[i]);

            //creating the checkboxes
            Checkboxes[i] = new CheckBox();
            Checkboxes[i].Name = "CB" + i.ToString();
            Checkboxes[i].Text = "";
            Checkboxes[i].Location = new System.Drawing.Point(440, (30 + (60 * i)));
            Checkboxes[i].Size = new System.Drawing.Size(18, 17);
            Checkboxes[i].Visible = true;
            Checkboxes[i].CheckedChanged += new EventHandler(this.CheckedChange);
            TodoList.Controls.Add(Checkboxes[i]);
        }

I have modified your code please see below, you can access your desired rich text box on checkbox click.

RichTextBox[] RichtextBoxes { get; set; }
        CheckBox[] Checkboxes { get; set; }

        private void Form1_Load(object sender, EventArgs e)
        {
            int n = TodoItems.Count;
             RichtextBoxes = new RichTextBox[n];
             Checkboxes = new CheckBox[n];
            for (int i = 0; i < n; i++)
            {
                //creating the richtextbox
                RichtextBoxes[i] = new RichTextBox();
                RichtextBoxes[i].Name = "TB-" + i.ToString();
                RichtextBoxes[i].Text = TodoItems[i].ToString();
                RichtextBoxes[i].Location = new System.Drawing.Point(130, (10 + (60 * i)));
                RichtextBoxes[i].Size = new System.Drawing.Size(300, 50);
                RichtextBoxes[i].Visible = false;
                RichtextBoxes[i].ReadOnly = true;
                RichtextBoxes[i].SelectionAlignment = HorizontalAlignment.Center;
                RichtextBoxes[i].BackColor = Color.White;
                TodoList.Controls.Add(RichtextBoxes[i]);

                //creating the checkboxes
                Checkboxes[i] = new CheckBox();
                Checkboxes[i].Name = "CB-" + i.ToString();
                Checkboxes[i].Text = "";
                Checkboxes[i].Location = new System.Drawing.Point(440, (30 + (60 * i)));
                Checkboxes[i].Size = new System.Drawing.Size(18, 17);
                Checkboxes[i].Visible = true;
                Checkboxes[i].CheckedChanged += checkBox1_CheckedChanged;
                TodoList.Controls.Add(Checkboxes[i]);
            }
        }

        void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox cb = sender as CheckBox;

            string cbName = cb.Name;
            int sbNumber = int.Parse(cbName.Split('-')[1]);

            RichtextBoxes[sbNumber].Visible = true; // you can get desired richtextbox here and can any thing with it :)


        }

I have found the answere, and I'll post it to make your life easyer

when I made the richtextboxes and the checkboxes I set there names to a number

Checkboxes[i].Name = i.ToString();

then I used the event that was provided for me by Mirza Danish Baig

Create and event void checkBox_CheckedChanged(object sender, EventArgs e) { } and then assign this event name Checkboxes[i].CheckedChanged += checkBox_CheckedChanged;

and after that I started to try things eventualy I came to this :

private void checkBox_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox ThisCheckbox = (CheckBox)sender;
        if (ThisCheckbox.Checked == true)
        { 
            //finding the richtextbox by id...
            RichTextBox ThisRichtextbox = this.Controls.Find("TB" + ThisCheckbox.Name, true).FirstOrDefault() as RichTextBox;
            try//try and catch for testing, this can be removed later.
            {
                MessageBox.Show(ThisRichtextbox.Text);
            }
            catch (Exception Exc)
            {
                MessageBox.Show(Exc.Message);
            }
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM