【问题标题】:synchronising tabpages and their controls同步标签页及其控件
【发布时间】:2013-10-09 03:41:51
【问题描述】:

我有 x 个 TabPage,每个 TabPage 上有一个 AddressBar 控件和一个 WebBrowser 控件。 WebBrowser 控件(自定义控件)有一个 int 类型的属性,称为 BrowserCount。

BrowserCount 值应与它所在的 TabPage 相同。所以 TabPage[0] 有一个 BrowserCount = 0 的浏览器;等等

但是,当我删除 TabPage 时,数字会不同步。显然,答案是简单地遍历剩余的 TabePages 并将 BrowserCount 重置为 TabPages 新索引。

我有这个代码:

private void UpdateTabs()
    {
        // Renumber Tabs and Browsers
        int tabCount = 0;
        foreach (TabPage tp in customTabControl1.TabPages)
        {
            tp.Tag = tabCount;
            foreach (Control ctrl in tp.Controls)
            {
                if (ctrl.Name == "browser")
                {
                    ctrl.BrowserCount = TabCount; // Error Unknown member BrowserCount
                }
            }
        }
    }

看来我需要在该选项卡上获取浏览器的实际实例才能访问 BrowserCount 属性(这根本不是属性,它只是一个公共(非静态)变量)。

有什么想法可以让浏览器的 BrowseCount 重新编号,以便它们与父 TabPage 的索引相同?

谢谢。

【问题讨论】:

  • 您可以使用 TabControl Count 属性作为迭代器的来源。
  • 如何在您的TabPage 上实现INotifyPropertyChanged 并在索引更改时引发事件?您需要使用这种方法创建自己的TabPage
  • 您可以做的一件事是您可以引发一个由您的 customTabControl 处理的事件。这样您就不必在特定标签页上保留浏览器的实际实例。
  • 我知道标签和浏览器何时关闭 - 我只需要将浏览器编号重新同步到标签索引。

标签: c# .net winforms user-controls tabs


【解决方案1】:

// 错误未知成员BrowserCount

对...因为您的变量“ctrl”属于 Control 类型,而 Control 没有名为“BrowserCount”的此类属性/字段。

您需要将“ctrl”转换为正确的类型。这可能类似于:

        int tabCount = 0;
        foreach (TabPage tp in customTabControl1.TabPages)
        {
            tp.Tag = tabCount;
            foreach (Control ctrl in tp.Controls)
            {
                if (ctl is YourUserControlTypeHere)
                {
                    YourUserControlTypeHere uc = (YourUserControlTypeHere)ctl;
                    uc.BrowserCount = TabCount; // Error Unknown member BrowserCount
                }
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    相关资源
    最近更新 更多