2013-02-15 3 views
0

Я пытаюсь сделать блокнот с хромовыми вкладками на нем. У меня есть кнопка «Новая страница» на моей странице. Когда я нажимаю на него, он создает новую вкладку с richtexbox на ней. В richboxes созданы как этотСобытие TextChanged для динамически созданных RichTextBoxes

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 на выбранной вкладке. Я получаю выбранный 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. Но я не могу их использовать, потому что я не знаю, как это сделать. Спасибо за помощь.

ответ

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

0

Вы не знаете, как создать events? Или вы не можете получить доступ к чему-то, зная его имя (используйте reflection)?

0

Хорошо, я решил свою проблему. Вот ответ;

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

Просто добавлено это в мой код после того, как я создал rtb, и он сработал. Спасибо всем, кто помог.