You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串转为DevExpress BarSubItem?权限控制遇类型转换错误

解决方案:字符串匹配DevExpress BarSubItem并设置权限

你遇到的错误核心是字符串类型与BarSubItem类型完全不兼容,TryCast仅支持继承/实现关系的类型转换,直接将字符串转为BarSubItem是无效的。正确的做法是通过字符串名称查找对应的BarSubItem实例,再设置权限。

方法1:通过BarManager查找(推荐)

DevExpress的Bar组件通常由BarManager统一管理,直接从其Items集合按名称匹配:

Dim BarParmTxt As String = "BarFile"
' 替换为你的BarManager实例名,比如barManager1
Dim targetItem = barManager1.Items.Cast(Of BarItem)().FirstOrDefault(Function(item) item.Name = BarParmTxt)

If TypeOf targetItem Is BarSubItem Then
    ' 根据权限设置:有权限设为True,无权限设为False
    DirectCast(targetItem, BarSubItem).Enabled = False
End If

方法2:遍历目标Bar的Items

如果BarSubItem属于特定Bar(如窗体上的barMain),直接遍历该Bar的Items集合:

Dim BarParmTxt As String = "BarFile"
' 替换为你的Bar实例名,比如barMain
Dim targetItem = barMain.Items.Cast(Of BarItem)().FirstOrDefault(Function(item) item.Name = BarParmTxt)

If targetItem IsNot Nothing AndAlso TypeOf targetItem Is BarSubItem Then
    DirectCast(targetItem, BarSubItem).Enabled = False
End If

方法3:反射获取窗体成员(适合BarSubItem为窗体字段的场景)

若BarSubItem是窗体的私有/公共成员变量,可通过反射直接获取:

Dim BarParmTxt As String = "BarFile"
Dim fieldInfo = Me.GetType().GetField(BarParmTxt, 
    Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.NonPublic)

If fieldInfo IsNot Nothing Then
    Dim subMenu = DirectCast(fieldInfo.GetValue(Me), BarSubItem)
    If subMenu IsNot Nothing Then
        subMenu.Enabled = False
    End If
End If

注意事项

  • 确保数据库存储的名称与BarSubItem的Name属性完全一致(区分大小写)
  • 必须处理targetItem为空的情况,避免空引用异常
  • 根据权限逻辑调整Enabled值:有权限时设为True,无权限设为False

内容的提问来源于stack exchange,提问作者Ahmed Rashed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:33:35