以编程方式添加的复选框上的多个 CheckedChanged 事件

Multiple CheckedChanged event on programmatically added checkboxes

我希望能够将每个复选框分配给它自己的 richtextbox

我在制作富文本框,然后在制作复选框,但我如何 "link" 将它们组合在一起?

例如:

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

这是我的代码:

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]);
        }

我已经修改了您的代码,请参见下文,您可以通过单击复选框访问所需的富文本框。

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 :)


        }

我找到了答案,我会post它让你的生活更轻松

当我制作富文本框和复选框时,我将它们的名称设置为一个数字

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

然后我使用了 Mirza Danish Baig 为我提供的活动

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

然后我开始尝试一些东西,最终我想到了这个:

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);
            }
        }
    }