多选项卡应用程序(C#)
我正在创建一个多选项卡的.NET应用程序,允许用户在运行时动态添加和删除选项卡。添加新选项卡时,会向其添加一个控件(作为子控件),可以在其中编辑内容(例如文本框)。用户可以使用工具栏/菜单栏在当前可见的文本框上执行任务 为了更好地解释这一点,请看下面的图片,看看我想要实现的一个示例。这只是一个模型,所以它实际上不是这样工作的,但它显示了我想要完成的事情。本质上,就像一个多标签记事本 在此处查看图像: 这在.NET中可能吗?我很确定,我只是在寻找一种可以实现它的方法。我建议您更新一些“当前状态”变量,以便始终有一个指向所选选项卡页面及其子控件的指针(在这里讨论的选项卡式记事本模拟的情况下:文本框)。我的首选是使用字典跟踪TabPageTextBox连接,以避免在使用TabPage访问文本框时强制转换文本框。控件路由:以下代码假定表单上有一个名为“tabControl1”的TabControl:多选项卡应用程序(C#),c#,.net,tabcontrol,tabs,tabpage,C#,.net,Tabcontrol,Tabs,Tabpage,我正在创建一个多选项卡的.NET应用程序,允许用户在运行时动态添加和删除选项卡。添加新选项卡时,会向其添加一个控件(作为子控件),可以在其中编辑内容(例如文本框)。用户可以使用工具栏/菜单栏在当前可见的文本框上执行任务 为了更好地解释这一点,请看下面的图片,看看我想要实现的一个示例。这只是一个模型,所以它实际上不是这样工作的,但它显示了我想要完成的事情。本质上,就像一个多标签记事本 在此处查看图像: 这在.NET中可能吗?我很确定,我只是在寻找一种可以实现它的方法。我建议您更新一些“当前状态”变
Dictionary<TabPage, TextBox> dct_TabPageToTextBox;
int tabCnt = 1;
TabPage currentTabPage;
TextBox currentTextBox;
现在,让菜单选项调用的代码仅应用于currentTextBox
最好的,比尔,我试了这个是为了好玩。。。我制作了一个带有ToolStripContainer的表单,其中有一个ToolStrip,带有标准按钮(包括粘贴按钮)。我将“粘贴”按钮重命名为“粘贴”按钮,并将您获得的所有内容连接起来:
public Form2()
{
InitializeComponent();
TabControl tc = new TabControl();
toolStripContainer1.ContentPanel.Controls.Add(tc);
tc.Dock = DockStyle.Fill;
TextBox selectedTextBox = null;
pasteButton.Click += (_, __) => selectedTextBox.Paste(Clipboard.GetText(TextDataFormat.Text));
int pages = 0;
newTabButton.Click += (_,__) => {
TextBox tb = new TextBox { Multiline = true, Dock = DockStyle.Fill, ScrollBars = ScrollBars.Vertical };
TabPage tp = new TabPage("Page " + (++pages).ToString());
tc.Selected += (o, e) => selectedTextBox = e.TabPage == tp ? tb: selectedTextBox;
tp.Controls.Add(tb);
tc.TabPages.Add(tp);
tc.SelectedTab = tp;
selectedTextBox = tb;
};
}
您可以使用一种简单的扩展方法:
public static void PasteIntoCurrentTab(this TabControl tabControl)
{
if (tabControl.SelectedTab == null)
{
// Could throw here.
return;
}
if (tabControl.SelectedTab.Controls.Count == 0)
{
// Could throw here.
return;
}
RichTextBox textBox = tabControl.SelectedTab.Controls[0] as RichTextBox;
if (textBox == null)
{
// Could throw here.
return;
}
textBox.Paste();
}
用法:
myTabControl.PasteIntoCurrentTab();
我只使用了代码的第15行,tabControl.SelectedTab.Controls[0](获取正确的控件)是我所需要的。(目前)效果很好。(也感谢你和其他人)。
public static void PasteIntoCurrentTab(this TabControl tabControl)
{
if (tabControl.SelectedTab == null)
{
// Could throw here.
return;
}
if (tabControl.SelectedTab.Controls.Count == 0)
{
// Could throw here.
return;
}
RichTextBox textBox = tabControl.SelectedTab.Controls[0] as RichTextBox;
if (textBox == null)
{
// Could throw here.
return;
}
textBox.Paste();
}
myTabControl.PasteIntoCurrentTab();