2013-02-15 55 views
0

我正在試圖用chrome-like標籤來做一個記事本。我的頁面上有一個「新建頁面」按鈕。當我點擊它時,它會創建一個帶有richtexbox的新選項卡。該richboxes都是這樣動態創建的RichTextBoxes的TextChanged事件

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 *。所以如果我在第二個tabpage上工作,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」。現在我無法爲此做一個textchanged事件。我不知道該怎麼做。我測試了上面的代碼是否工作,是的,我得到了正確的rtb名稱。但我不能使用它們,因爲我不知道該怎麼辦..感謝您的幫助。

回答

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 
       //...... 
      } 
     } 
+0

謝謝你的回答 – user1767833 2013-02-15 14:25:28

0

您不知道如何創建events?或者你知道它的名字時不能訪問某些東西(使用reflection)?

0

好吧我解決了我的問題。這是答案;

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

簡單地在我創建rtb後將其添加到我的代碼中,並且它工作正常。感謝所有幫助過我的人。