【发布时间】:2012-04-05 16:29:15
【问题描述】:
我正在创建一个带有标签功能的简单记事本类型的应用程序。我正在运行时创建 TabControl、它的 TabPages 和 RichTextBoxes。我让它们在类范围内实例化。还有一个MenuStrip项叫做New,点击可以添加更多的标签页。
TabControl tbcEditor = new TabControl();
TabPage tbPage = new TabPage();
RichTextBox rtb = new RichTextBox();
private void frmTextEditor_Load(object sender, EventArgs e)
{
Controls.Add(tbcEditor);
tbcEditor.Dock = DockStyle.Fill;
tbcEditor.TabPages.Add(tbPage);
tbPage.Controls.Add(rtb);
rtb.Dock = DockStyle.Fill;
}
private void newToolStripMenuItem_Click(object sender, EventArgs e)
{
//TabPage tbPage = new TabPage();
//RichTextBox rtb = new RichTextBox();
tbPage.Controls.Add(rtb);
rtb.Dock = DockStyle.Fill;
tbcEditor.TabPages.Add(tbPage);
}
我面临的问题有点难以解释。我会尽力的。当表单加载时,一切都按预期工作。 TabControl 使用添加了 RichTextBox 的 TabPage 创建。但是,如果我单击该新建按钮来添加另一个页面,它就会变得疯狂。创建了一个新的 TabPage,但没有添加 RichTextBox。也不会抛出任何错误。如果我取消注释掉这 2 行(在 MenuItem 单击事件下),它创建了 TabPage 和 RichTextBox 的 2 个实例,一切都按我的意愿工作。
现在我的第一个问题是为什么我必须再次创建只有这两种类型(TabPage、RichTextBox)的新实例,而不是 TabControl?正如你在最后一行看到的,我可以再次使用tbcEditor。但不是tbPage 和rtb。
当然,我可以继续在本地范围内再次声明它们,但随后会出现另一个问题。如果我想说,添加复制、粘贴功能,我应该这样做,对吧?
Clipboard.SetDataObject(rtb.SelectedText);
但我无法访问rtb,因为它被声明为本地。
对此我感到非常困惑,因此非常感谢任何有关如何克服这两个问题的建议和想法。
谢谢。
【问题讨论】:
标签: c# dynamic-controls