0

クロームのようなタブが付いたメモ帳を作成しようとしています。ページに[新しいページ]ボタンがあります。それをクリックすると、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*です。したがって、2番目のタブページで作業している場合、rtbの名前は「richTextBox2」です。今私がやろうとしているのは、選択したタブページのリッチテキストボックスの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名を正しく取得しました。でも、やり方がわからないので使えません。助けてくれてありがとう。

4

3 に答える 3

3
    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
              //......
          }
      }
于 2013-02-15T14:17:49.497 に答える
0

イベントの作成方法がわかりませんか? または、名前を知っている間は何かにアクセスできません (リフレクションを使用します)?

于 2013-02-15T14:18:52.683 に答える
0

わかりました私は私の問題を解決しました。これが答えです。

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

rtb を作成した後、これをコードに追加するだけで機能しました。助けてくれたみんなに感謝します。

于 2013-02-15T14:23:27.747 に答える