2012-05-18 3 views
1

Все, я хочу добавить пользовательский RichTextBox в WinForm TabPage. Я пробовал различные вещи, проиллюстрированные ниже кодПрограммно Добавить элемент управления на вкладку

TabPage tmpTabPage = new TabPage("Test"); 
tabControl1.TabPages.Add(tmpTabPage); 

CustomRichTextBox tmpRichTextBox = new CustomRichTextBox(); 
tmpRichTextBox.LoadFile(@"F:\aaData\IPACostData\R14TData\ACT0\1CALAEOSAudit_log.rtxt"); 

// Attempted FIX. 
tabControl1.SuspendLayout(); 
tabControl1.TabPages["Test"].Controls.Add(tmpRichTextBox); // This throws a NullReferenceException?? 
tabControl1.ResumeLayout(); 

tmpRichTextBox.Parent = this.tabControl1.TabPages["test"]; 

tmpRichTextBox.WordWrap = tmpRichTextBox.DetectUrls = false; 
tmpRichTextBox.Font = new Font("Consolas", 7.8f); 

tmpRichTextBox.Dock = DockStyle.Fill; 
tmpRichTextBox.BringToFront(); 

До того как я добавил «aAttempted FIX», код будет работать без исключения, но CustomRichTextBox не будет появляться. Теперь я получаю NullReferenceException, и я смущен в обеих ситуациях. Что я здесь делаю неправильно?

+0

Решение ниже в сочетании с приведенным выше - это все, что мне нужно/иметь ... – MoonKnight

ответ

4

То, что вы действительно не хватает устанавливает свойство «Name» для переменной TabPage. Строка, которую вы передаете конструктору TabPage, устанавливает только свойство TabPage.Text.

Просто добавьте следующий код после инстанцирования вашего TabPage и вы должны быть хорошо:

TabPage tmpTabPage = new TabPage("Test"); 
tmpTabPage.Name = "Test" 
// Rest of your code here 

Причины вы получаете NullReferenceException потому, что следующий код:

tabControl1.TabPages["Test"] 

не возвращают ссылку на TabPage, поскольку свойство «Имя» TabPage не было установлено.

+0

Нет, вы задаете имя 'TabPage', когда вы вызываете его перегруженный конструктор так, как я выше. По этой причине ваш ответ неверен. Правильный ответ ia выше и уже принят. Благодарю. – MoonKnight

+2

Возможно, вам стоит проверить документацию MSDN перед тем, как опробовать кого-нибудь. Посмотрите на это: [link] (http://msdn.microsoft.com/en-us/library/e4983y5c.aspx). Перегруженный конструктор устанавливает свойство «Текст», а не свойство «Имя» TabPage. Однако, когда вы пытаетесь получить ссылку на TabPage через коллекцию «TabControl.TabPages», вам нужно использовать имя TabPage в качестве ключа. Мой ответ просто предлагает установить имя TabPage и вуаля! Код теперь работает. Не говоря уже о том, что я также объяснил, почему она получает исключение NullReferenceException. – Samir

+0

Вы правы - прошу прощения. Достойный ответ ... Хотя я не женщина:]. Downvote recinded, и я буду менее поспешным в следующий раз ... – MoonKnight

3

Попробуйте, как это, добавив tmpRichTextBox к tmpTabPage, а затем добавить к tmpTabPage tabControl1

 TabPage tmpTabPage = new TabPage("Test"); 
     CustomRichTextBox tmpRichTextBox = new CustomRichTextBox(); 
     tmpRichTextBox.LoadFile(@"F:\aaData\IPACostData\R14TData\ACT0\1CALAEOSAudit_log.rtxt"); 

     // Attempted FIX. 
     tmpTabPage.SuspendLayout(); 
     tmpTabPage.Controls.Add(tmpRichTextBox); // This throws a NullReferenceException?? 
     tmpTabPage.ResumeLayout(); 

     tmpRichTextBox.Parent = tmpTabPage; 

     tmpRichTextBox.WordWrap = tmpRichTextBox.DetectUrls = false; 
     tmpRichTextBox.Font = new Font("Consolas", 7.8f); 

     tmpRichTextBox.Dock = DockStyle.Fill; 
     tmpRichTextBox.BringToFront(); 

     //tmpTabPage.Controls.Add(tmpRichTextBox); 
     tabControl1.TabPages.Add(tmpTabPage); 
+0

По-прежнему получите 'NullReferenceException'. – MoonKnight

+0

Держитесь. Я получил это ... – MoonKnight

+1

Удалить часть «Попытка FIX» .. – banging

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