【问题标题】:TextChanged event for dynamically created RichTextBoxes动态创建的 RichTextBox 的 TextChanged 事件
【发布时间】:2013-02-15 13:51:25
【问题描述】:

我正在尝试制作一个带有类似 chrome 的标签的记事本。我的页面上有一个“新页面”按钮。当我单击它时,它会创建一个带有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*indexofthetabhere*。因此,如果我正在处理第二个标签页,则 rtb 的名称是“richTextBox2”。现在我想要做的是我想要在所选标签页上为 Richtextbox 设置一个 textchanged 事件。我在这里使用此代码获取选定的富文本框。

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”。现在我不能为此创建一个 textchanged 事件。我不知道实际上该怎么做。我测试了上面的代码是否正常工作,是的,我得到了正确的 rtb 名称。但是我无法使用它们,因为我不知道该怎么做。谢谢您的帮助。

【问题讨论】:

    标签: c# .net richtextbox textchanged


    【解决方案1】:
        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
                  //......
              }
          }
    

    【讨论】:

      【解决方案2】:

      你不知道如何创建events?或者您在知道名称的情况下无法访问某些内容(使用reflection)?

      【讨论】:

        【解决方案3】:

        好的,我解决了我的问题。这是答案;

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-06
          相关资源
          最近更新 更多