北外青少英语平台:VB中,如何判断菜单栏是否被隐藏?

来源:百度文库 编辑:神马品牌网 时间:2024/05/05 22:56:58
假如我的form里设置了菜单“文件”和“编辑”,但这两个菜单的visible都是flase,在启动程序的时候,上面也不显示菜单条

请问,在不知道菜单name的情况下,有什么办法可以判断出,本form里有菜单,但是被隐藏掉了
其实我的用途是这样的:

最近在写个和坐标有关的程序,需要获取到某控件的实际坐标,但是如果form上有菜单的时候和没菜单的时候,控件的top就会增加一点(就是菜单的高度)

虽然使用API可以判断出一个form里是否有菜单,但是如果菜单全部隐藏掉(运行时效果和没有菜单是一样的),这时用API判断form里是有菜单的,而且确实也是有的,但是不在窗口中显示,所以等于是没有

由于这个程序将来要在其他地方通用,所以还不能直接拿菜单名去判断visible的值。。。

不知道有什么好的方法能判断出,当前窗口里是否有菜单(外表上的)

Form 的所有控件(不管隐藏与否)都有收录在 Controls 里,所以你可以遍历 Controls 访问它们。

下面的代码将列出所有被隐藏的菜单的名字:
 
 
Private Sub Form_Load()

    For Each ctrl In Controls
        If TypeOf ctrl Is Menu Then
            If ctrl.Visible = False Then
                s = s & ctrl.Name & vbNewLine
            End If
        End If
    Next
    
    MsgBox "Found the following hidden menu(s):" & vbNewLine & s

End Sub
 
 
注:不使用 And 结合两个条件判断的原因是 Controls 里可能有像 Timer 这种没有 Visible 属性的控件。

你可以做个ON ERROR, 错误时跳到一个地方, 表示没有菜单, 你预先把这个地方设为没有菜单的处理代码段,但得保证有菜单时不跳到这个地方来,
正确而无错时, 顺序执行到错误段的时候就加个return, 这样就区分有菜单和无菜单.

有一点必须保证代码的执行都受控, 而不会有你不预知的错误.

方法有些怪, 也可以处理了.

用enabled不就行了.