ToolStripItem的Visible那样读取有没有道理

 

我本意是定制菜单(WinForm),根据用户角色对某些项设为Visible=False不显示,有些显示但不作用设为Enabled=False.
系统管理员的界面显示所有菜单,并且通过设置某些菜单的Visible、Enabled来生成一个配置文件,供相应角色的用户使用。

在读取配置文件后发现,ToolStripItem的Visible值除了一级菜单那些项是正确的,二级及以下的菜单项,不管真实Visible是“真”是“假”,读出来的值全是“假”。
为此,Reflector了一下这个Visible,代码如下:

<SRDescription("ToolStripItemVisibleDescr"), Localizable(True), SRCategory("CatBehavior")> _
Public Property Visible As Boolean
      Get
            If ((Not Me.ParentInternal Is Nothing) AndAlso Me.ParentInternal.Visible) Then
                  Return Me.Available
            End If
            Return False
      End Get
      Set(ByVal value As Boolean)
            Me.SetVisibleCore(value)
      End Set
End Property

果是有文章。
MSDN文档中如此写道:

ToolStripItem.Visible 属性
注意:此属性在 .NET Framework 2.0 版中是新增的。
获取或设置一个值,该值指示是否显示该项。

那应该是不正确的了,哪能获取指示是否显示该项呢?

测试:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim item As New ToolStripMenuItem
    Console.WriteLine(item.Visible)
    '结果:False
    Me.MainMenuStrip.Items.Add(item)
    Console.WriteLine(item.Visible)
    '结果:True
End Sub

另,ToolStripItem也提供了VisibleChanged事件,
MSDN文档中说,

ToolStripItem.VisibleChanged 事件
注意:此事件在 .NET Framework 2.0 版中是新增的。
当 Visible 属性的值更改时发生。

由于读取太特别了,除了一级菜单能激发事件外,其它的都不能激发。
测试:
Private Sub NewToolStripMenuItem_VisibleChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewToolStripMenuItem.VisibleChanged
    Console.WriteLine("New VisibleChanged")
    '结果:不能显示
End Sub

Private Sub FileToolStripMenuItem_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles FileToolStripMenuItem.VisibleChanged
    Console.WriteLine("File VisibleChanged")
    '结果:正常显示
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    Me.NewToolStripMenuItem.Visible = Not Me.NewToolStripMenuItem.Visible
    Me.FileToolStripMenuItem.Visible = Not Me.FileToolStripMenuItem.Visible
End Sub

现在,这个Visible在实现我的功能里是不能使用了。真不明白,这样的Visible读取有没有道理?
 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值