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

时间:2015-05-12 11:25:11

标签: c# forms checkbox richtextbox

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

我正在创建富文本框,然后我正在制作复选框但是如何将它们“链接”在一起呢?

例如:

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

2 个答案:

答案 0 :(得分:0)

我修改了您的代码,请参阅下面的内容,您可以通过复选框点击访问所需的富文本框。

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


        }

答案 1 :(得分:0)

我找到了回答,我会发布帖子让你的生活更轻松

当我创建richtextboxes和复选框时,我将名称设置为数字

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

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

  

创建和事件void checkBox_CheckedChanged(object sender,EventArgs e){}然后分配此事件名称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);
            }
        }
    }