c# - 以编程方式选择 TabControl 中的现有 TabPage 会显示一个空白页
问题描述
TabManager
如果具有指定文本的 TabPage 不存在,我使用此方法在 TabControl ( ) 中创建一个新的 TabPage ,或者如果它已经存在则选择它:
private void AddControls(UserControl uc, string TabCaption)
{
Boolean TabFound = false;
if (TabManager.TabCount == 0)
{
TabPage tp = new(TabCaption);
TabManager.TabPages.Add(tp);
uc.Dock = DockStyle.Fill;
tp.Controls.Add(uc);
TabManager.SelectedTab = tp;
}
else
{
TabPage tp = new(TabCaption);
foreach (TabPage tp1 in TabManager.TabPages)
{
if (tp1.Text == TabCaption)
{
TabFound = true;
}
}
if (TabFound != true)
{
TabManager.TabPages.Add(tp);
uc.Dock = DockStyle.Fill;
tp.Controls.Add(uc);
TabManager.SelectTab(tp);
//tp.Show();
//tp.BringToFront();
}
else
{
TabManager.SelectedTab = TabManager.TabPages[tp.Name];
return;
}
}
}
问题是未选择 TabPage,而是显示了一个空页面。
有问题的代码似乎是:
TabManager.SelectedTab = TabManager.TabPages[tp.Name];
因为它只会显示一个空的 TabPage。
我搜索了文档,但到目前为止没有找到解决方案。
解决方案
如果您使用提供的文本创建一个新的 TabPage(如 中TabPage tp = new(TabCaption);
),则您的tp
对象与具有相同 Caption 的现有 TabPage 不同,因此TabManager.SelectTab(tp);
不会选择它(不是同一个对象)。
您会看到空白背景,因为当您使用TabControl.SelectedTab()方法并且指定的 TabPage 不存在时,没有 TabPage 是当前的,因此您只会看到 TabControl 背景。
要确定是添加还是只选择一个 TabPage,您可以检查 TabControl 是否没有 TabPages(就像您正在做的那样),并验证是否已经存在具有相同名称的 TabPage。
您可以使用TabPageCollection.IndexOfKey()方法来执行此检查。
您应该为新的 TabPage 分配一个名称,而不仅仅是一个 Caption,就像在 Designer 中创建一个新的 TabPage 时一样。
这简化了 TabPages 的创建和/或选择。您的代码可能是:
private void AddControls(Control uc, string tabCaption)
{
if (TabManager.TabCount == 0 || TabManager.TabPages.IndexOfKey(tabCaption) < 0) {
var tp = new TabPage(tabCaption);
// or TabPage tp = new(tabCaption);
tp.Name = tabCaption;
uc.Dock = DockStyle.Fill;
tp.Controls.Add(uc);
TabManager.TabPages.Add(tp);
}
TabManager.SelectedTab = TabManager.TabPages[tabCaption];
}
推荐阅读
- algorithm - 如何在图中找到不包含集合中节点的路径?
- ios - SwiftUI 流程完成/完成后如何返回 UIViewController?
- python - 如何更改 element.style python selenium 中的值?
- swift - 在 Swift 中执行同步 API 调用
- graphql - 在 Appsync 架构中返回 String 或 [String]
- assembly - BT指令与进位标志CF的连接
- ios - 在 Swift 中以正确的格式在 NFC 标签上写入 URL
- reactjs - 在我的 nextJS 项目中移动了一个文件夹,现在我得到了 moduleNotFoundError
- php - WooCommerce:如何将 $_GET 中的值插入 $order->update_meta_data
- angular-cdk-drag-drop - CdkDrag 移动标题而不是整个对话框?