首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定C#中ToolStripItem的实际类型

如何确定C#中ToolStripItem的实际类型
EN

Stack Overflow用户
提问于 2011-07-31 17:38:02
回答 3查看 1.7K关注 0票数 1

我正在将一个VB.Net应用程序转换为C#。其他的一切都很顺利。除了这点。我有一个功能,从一个数据库建立菜单,子菜单和分隔符。它可以构建MenuStrip或ContextMenuStrip,然后可以将它们分配给表单。

这意味着菜单可以是扩展的和conpmex的,但可以在应用程序之外进行管理,我也将其用作我的安全访问模型的一部分。所有的菜单都是从外部数据库控制的,这也意味着我可以开发可视化工具(Treeviews等)来管理用户菜单。该应用程序广泛使用菜单,这是设计出来的。

以编程方式,我希望为每个不是下拉列表或分隔符的项分配一个eventhandler

在VB中,我会这样做,(效果很好)

代码语言:javascript
复制
Private Sub AddHandlers (ByVal voMenuItems As ToolStripItemCollection)

For Each oItem in voMenuItems
    If TypeOf(oItem) is ToolStripDropDown then
        if oItem.DropDownItems.Count > 0 then
            AddHandlers(oItem.DropDownItems)
        Else
            AddHandler oItem.Click, AddressOf ToolBarButtonClick
        End If
    End If
Next

End Sub

Private Sub ToolbarButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs)

'Do something

End Sub

但是如何在C#中实现同样的功能呢?

我必须像这样编写我的循环

代码语言:javascript
复制
foreach (ToolStripItem oItem in voMenuItems)

它总是返回一个ToolStripItem (使用GetType或typeof),我找不到任何方法来确定ToolStripItem实际是项的类型(ToolStripDropDown或ToolStripSeperator),即使这样我也不能转换为我想要的类型,例如

代码语言:javascript
复制
(ToolStripDropDown)oItem.DropDownItems.Count ...

这会产生编译时错误

"System.Windows.Forms.ToolStripItem‘不包含'DropDownItems’的定义,并且找不到接受'System.Windows.Forms.ToolStripItem‘类型的第一个参数的扩展方法'DropDownItems’(是否缺少using指令或程序集引用?)“

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-31 17:45:31

您可以使用以下两种方法之一:

代码语言:javascript
复制
ToolStripDropDown tsdd = oItem as ToolStripDropDown
if (tsdd != null)
{
}

如果“as”转换不起作用,它将返回null,或者您可以这样做:

代码语言:javascript
复制
try
{
    ToolStripDropDown tsdd = (ToolStripDropDown)oItem;
}
catch
{
    // Do something ...
}

另外,要检查对象的类型,请执行以下操作:

代码语言:javascript
复制
bool isToolStripDropDown = oItem is ToolStripDropDown;

或者:

代码语言:javascript
复制
bool isToolStripDropDown = oItem.GetType() == typeof(ToolStripDropDown);
票数 2
EN

Stack Overflow用户

发布于 2011-07-31 17:43:42

您可以使用is关键字。

所以,

If TypeOf(oItem) is ToolStripDropDown (VB)

变成了

if (oItem is ToolStripDropDown) (C#)

您可能还希望查看as关键字,该关键字允许您尝试强制转换为类型,但如果无法转换,则返回null。

票数 0
EN

Stack Overflow用户

发布于 2022-02-25 09:21:58

在VB中,我可以做到

代码语言:javascript
复制
oItem.GetType.ToString

所以在这段代码中:

代码语言:javascript
复制
                    Dim tmenu As New ToolStripMenuItem(menu.Name)
                    ASRMenus.DropDownItems.Insert(mPosition, tmenu)
                    Dim t As ToolStripItem = CType(tmenu, ToolStripItem)

在调试器中询问此问题

代码语言:javascript
复制
?t.GetType.tostring

给了"System.Windows.Forms.ToolStripMenuItem“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6888644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档