2010-08-31 69 views
0

我很难相信这里没有答案,但它看起来确实不存在。什么是C#中视觉元素的共同祖先?

我想遍历表单上的所有内容,并根据标记值设置可见和启用的属性。我发现在迭代控件的例程和迭代菜单的例程之间有一个绝对重复的例程 - 尽管这两个类都具有可见,启用和标签属性,但它们似乎是单独的项目。

据我可以告诉树只收敛在组件 - 但这缺乏视觉属性。

+1

您是指WinForms,WebForms还是WPF? – Foole 2010-08-31 23:03:01

+0

@Fole:猜测WinForms是因为他引用了'Tag',它只存在于WinForms控件结构中。 – Aren 2010-08-31 23:20:55

+0

@Aren,的确我认为它是Windows窗体,但是因为Component是共同的祖先。 WPF控件确实有一个Tag属性。 – 2010-08-31 23:32:44

回答

1

这是正确的,没有共同的祖先。 ToolStripMenuItem类是从ToolStripItem派生的,ToolStripItem是许多派生类的基类,它们是MenuStrip或ToolStrip的一部分。它们是特殊的,因为它们不是来自控制。它们是无窗口控件,它们没有Handle属性。这是Control基类的关键属性。

这是一个优化,控制派生类是昂贵的。他们需要一个本地Windows窗口,一个拥有大量开销的繁重操作系统对象。当你在表格上放置50个按钮时,这一点非常明显。你可以看到它的油漆。

复制这个逻辑是正常的。使用Tag属性来控制状态不是。

+0

标签位正在检查当前用户是否应该能够使用该项目。 – 2010-09-01 00:31:20

+0

这不是启用/可见的目的吗?如果用户不能使用该项目,则禁用它,Windows将以相当明确的方式进行渲染,或者将其完全隐藏。在大多数最终用户应用程序中,用户不希望看到他们不能做的大量事情,他们的主管也不希望看到(因为监督人员总是会按照“为什么不接受投诉'我有权这样做吗?“) – KeithS 2010-09-01 01:05:01

+0

@Keith:他使用Tag属性来表示”仅可见于特权眼睛“。 – 2010-09-01 01:09:00

相关问题