动态创建的RichTextBoxes的TextChanged事件

本文关键字:事件 TextChanged RichTextBoxes 动态 创建 | 更新日期: 2023-09-27 17:59:45

我正在尝试制作一个带有类似镀铬标签的记事本。我的页面上有一个"新建页面"按钮。当我点击它时,它会创建一个带有richtexbox的新选项卡页面

public void yeni()
    {
        //create a new tabpage
        TabPage newPage = new TabPage("Not-" + (tabControl1.TabPages.Count + 1));
        //create a new richtexbox
        RichTextBox rtb = new RichTextBox();
        int rtbname = tabControl1.TabPages.Count + 1;
        rtb.Name = "richTextBox" + rtbname.ToString();
        rtb.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Left | AnchorStyles.Top);
        rtb.BorderStyle = BorderStyle.None;
        rtb.Width = 778;
        rtb.Height = 395;
        rtb.Location = new Point(0, 4);
        rtb.HideSelection = false;
        rtb.Font = new Font("Lucida Console", 9.75f);
        rtb.ForeColor = Color.Maroon;
        //add rtb to the tabpage
        newPage.Controls.Add(rtb);
        tabControl1.TabPages.Add(newPage);
        //make the new created tab the selected one
        tabControl1.SelectedTab = tabControl1.TabPages[tabControl1.TabPages.Count - 1];
        //selectedRtb.Text = null;
        openFileDialog1.FileName = null;
    }

现在我创建了一个RichTextBox,这个rtb的名称是RichTextBox*indexoftabhere*。因此,如果我正在处理第二个选项卡页面,则rtb的名称为"richTextBox2"。现在我要做的是,我希望在所选的选项卡页面上为richtextbox创建一个textchanged事件。我将在此处获取带有此代码的选定richtextbox。

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
    {
        selectedone = "richTextBox" + (tabControl1.SelectedIndex+1).ToString();

            selectedRtb = (RichTextBox)tabControl1.SelectedTab.Controls[selectedone];
            textBox2.Text = selectedone;
    }

现在在这里我得到了选定的选项卡索引,得到了rtb名称,然后我得到了所选的rtb作为"selectedRtb"。现在我无法为此创建文本更改事件。实际上我不知道该怎么办。我测试了上面的代码是否有效,是的,我得到了正确的rtb名称。但我不能用它们,因为我不知道该怎么做。谢谢你的帮助。

动态创建的RichTextBoxes的TextChanged事件

    public void yeni()
    {
       //....
       RichTextBox rtb = new RichTextBox();
       rtb.Name = "richTextBox" + selectedTabPageIndex.ToString();
       rtb.TextChanged += rtb_TextChanged;
        //....    
     }

     void rtb_TextChanged(object sender, EventArgs e)
     {
          RichTextBox rtb = (RichTextBox)sender;
          if (rtb.Name == "richTextBox" + selectedTabPageIndex.ToString())
          {
              //rtb is selected page richtextbox
              //......
          }
      }

您不知道如何创建事件?或者你在知道某个东西的名字的情况下无法访问它(使用反射)?

好吧,我解决了我的问题。答案如下;

selectedRtb.TextChanged += (bs, be) =>
        {
           //whatever you want to do
        };

在我创建rtb后,只需将其添加到我的代码中,就可以了。感谢所有提供帮助的人。