代码之家  ›  专栏  ›  技术社区  ›  Loren Pechtel

C#中视觉元素的共同祖先是什么?

  •  0
  • Loren Pechtel  · 技术社区  · 14 年前

    据我所知,树只在组件处收敛——但这缺乏可视属性。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Hans Passant    14 年前

    没错,没有共同的祖先。ToolStripMenuItem类是从ToolStripItem派生的,ToolStripItem是作为MenuStrip或ToolStrip的一部分的许多派生类的基类。它们之所以特别,是因为它们不是从控制中派生出来的。它们是无窗口控件,没有句柄属性。这是控件基类的关键属性。

    这是一个优化,控件派生类很昂贵。他们需要一个本地的Windows窗口,一个有大量开销的沉重的操作系统对象。当你在一张表格上放50个按钮的时候就很明显了。你可以看到它在作画。

    因此,重复这种逻辑是正常的。使用Tag属性来控制状态是不正确的。

        2
  •  0
  •   Frederic    5 年前

    没有共同的祖先,但是您可以通过使用 dynamic 类型。例如:

    object control = new Button() { Tag = "Whatever" };
    object menuItem = new ToolStripMenuItem { Tag = "Something else" };
    object tag1 = (control as dynamic).Tag;
    object tag2 = (menuItem as dynamic).Tag;
    // Do something with tag1 and tag2