以编程方式将控件添加到选项卡页

本文关键字:选项 添加 控件 编程 方式 | 更新日期: 2023-09-27 18:34:33

All,我想添加一个自定义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();

在我添加"aTry FIX"之前,代码将无异常运行,但CustomRichTextBox不会出现。现在我得到了NullReferenceException,我对这两种情况都感到困惑。我在这里做错了什么?

以编程方式将控件添加到选项卡页

您真正缺少的是为 TabPage 变量设置"Name"属性。传递给 TabPage 构造函数的字符串仅设置 TabPage.Text 属性。

只需在实例化 TabPage 后添加以下代码,您应该没问题:

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

您获得 NullReferenceException 的原因是因为以下代码:

tabControl1.TabPages["Test"]

不返回对 TabPage 的引用,因为未设置 TabPage 的"名称"属性。

尝试这样做,方法是将 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);