2013-11-19 2 views
0

Я пытаюсь добавить TabPage и внутри него текстовое поле. Проблема в том, что если у меня больше вкладок, содержимое TextBox всегда является последним добавленным, а не выбранным TabPage.Добавление вкладок с элементами управления внутри них динамически?

enter image description here

EDIT 3 //

public partial class Form1 : Form 
{ 
    int tabcount = 0; 
    TextBox TextE; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // Create a new textbox to add to each control 
     TextE = new TextBox(); 

     // Fill the tabpage 
     TextE.Dock = DockStyle.Fill; 
     TextE.Multiline = true; 

     // Create new tab page and increment the text of it 
     TabPage tab = new TabPage(); 
     tab.Text = "Tab" + tabcount.ToString(); 

     // Add Textbox to the tab 
     tab.Controls.Add(TextE); 

     // Add tabpage to tabcontrol 
     tabControl1.Controls.Add(tab); 
     tabcount++; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     // Text content to messagebox... 

     MessageBox.Show(TextE.Text); 
    } 


} 

ответ

1

Попробуйте назвать вкладки с индексом номера ("Tab01", "Tab02" и т.д.), а затем бросить текущую вкладку в Scintilla TextEditor , Не путайте имя объекта и свойство Name. Коллекция управления использует свойство name как индексный ключ. так что даже если у вас есть объекты, которые вы объявили с тем же именем, если свойство имени отличается, вы можете их добавить.

Например

Scintilla NewTextEditor = new Scintilla(); 
    NewTextEditor.Name = "tab" + (this.Controls.OfType<Scintilla>.Count + 1).ToString("00"); 
    this.Controls.Add(NewTextEditor); 

это добавит новый элемент управления изменить свойство имени, поэтому он может быть добавлен.

Тогда Предполагая, что у вас есть способ определения текущей вкладки

Scintilla TextEditor = CurrentTab; 
+0

Я попытался изменить код, как предложено; однако, я получаю сообщение об ошибке. – xterminal0

+1

Вы пытаетесь назначить строку в качестве элемента управления. Используйте строку в качестве индекса коллекции Controls и назначьте этот элемент управления текстовому комментатору – tinstaafl

+0

Controls.IndexOf (TextEditor) .ToString() всегда показывает -1, теперь важно, сколько элементов управления было добавлено. Я не могу понять, почему? – xterminal0

Смежные вопросы