菜单标题中有多个 & 符号,能否在不改动标题!!!(俺知道添加&的办法)的情况下,让其正确显示出来呢?

解决方案 »

  1.   

    && 就是菜单上的 & 了
      

  2.   

    加一个"&"在字符下划线;
    加两个"&&"就是正确的显示"&"了
      

  3.   

    晕倒,顶楼已经写明了,我知道添加双&的办法!但是这需要修改原来的菜单标题,现在的目的是,要用菜单来显示字符串,因而是大量的、动态的,每次显示时要修改一遍字符串,而单击后取到的标题又要修改一次,实在是太低效了。(VB在这上面是最慢的)我想找一种类似于Label控件的UseMnemonic 属性,能够不需要读写字符串。
    或者,能否发一条消息,就能实现呢?俺不知道,所以才问的,还请各位老大帮帮小弟,谢谢!豆子老大,这回有解吗? :)
      

  4.   

    怎么组织啊?菜单名是从文本文件读取的,只使用一次,都是文件名全路径,直接到不能再直接,一行一条,行数不固定。运行时,动态生成菜单,弹出供选择(数量太多要翻页,这点不用俺关心,要怪只能怪生成文件的人)根据点击后的菜单标题,再打开对应的文件。路径可能很长,而且关键一点——实际路径可能会包含双&符号!(这是Windows允许的命名规则)所以原则上俺不希望修改菜单标题。
    如果实在不行的话,能否请豆子老大再详细说一下,如何提高效率?谢谢:)//你真的从效率上考虑的话,你不妨把你菜单名字用结构、数组或集合对象组织起来
      

  5.   

    再问一下,你是用load动态生成菜单的么?
      

  6.   

    不知道你所说的是不是这种效果VERSION 5.00
    Begin VB.Form Form1 
       Caption         =   "Form1"
       ClientHeight    =   3195
       ClientLeft      =   165
       ClientTop       =   735
       ClientWidth     =   4680
       LinkTopic       =   "Form1"
       ScaleHeight     =   3195
       ScaleWidth      =   4680
       StartUpPosition =   3  '窗口缺省
       Begin VB.Menu mnuMain 
          Caption         =   "Main"
          Begin VB.Menu tpl 
             Caption         =   "tpl"
             Index           =   0
          End
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option Explicit
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    '存放所有文件名的数组
    Private m_asMenuItems() As StringPrivate Sub Form_Load()
        Dim sFilename As String, sTargetDir As String
        sFilename = "C:\ft.txt"
        sTargetDir = "E:\Downloads\"
        GenerateFile sFilename, sTargetDir
        m_asMenuItems = GenerateMenu(sFilename)
    End Sub'产生包含文件名的文件
    Function GenerateFile(ByVal sFilename As String, ByVal sTargetDir As String) As Boolean
        Dim lFreeFile As Long
        Dim sTmp As String
        
        lFreeFile = FreeFile
        Open sFilename For Output As lFreeFile
        
        sTmp = Dir(sTargetDir & "*.*")
        Do While sTmp <> ""
            Print #lFreeFile, sTargetDir & sTmp
            sTmp = Dir
        Loop
        Close lFreeFile
    End Function'产生菜单
    Function GenerateMenu(ByVal sFilename As String) As String()
        Dim asTmp() As String
        Dim lFreeFile As Long
        Dim i As Long
        
        lFreeFile = FreeFile
        Open sFilename For Input As lFreeFile
        
        i = 0
        Do While Not EOF(lFreeFile)
            ReDim Preserve asTmp(i)
            Line Input #lFreeFile, asTmp(i)
            
            If i > 0 Then Load tpl(i)
            
            tpl(i).Caption = Replace$(asTmp(i), "&", "&&")
            
            i = i + 1
        Loop
        
        Close lFreeFile
        
        GenerateMenu = asTmp
    End Function'菜单命令
    Private Sub tpl_Click(Index As Integer)
        ShellExecute 0, "open", m_asMenuItems(Index), "", "", vbNormalFocus
    End Sub
      

  7.   

    俺是用Load语句加载菜单的。不过,老大,俺最大的问题——俺是VB5诶。这一句不行:
    tpl(i).Caption = Replace$(asTmp(i), "&", "&&")这一句也通不过:
    m_asMenuItems = GenerateMenu(sFilename)
      

  8.   

    但是,俺理解了老大的意思。你是说用全局(模块)数组变量储存载入的文件内容,只在显示菜单的时候才替换&符号。
    当点击时,根据Index编号取到相应的内容。只是这样做,觉得效率还是低了点,而且还浪费了空间 :(现在俺的做法是直接载入文本内容到菜单标题,结果就是——由于往往&符号在中文字前,所以会在中文下加上下划线,太难看了(如果加在英文前到问题不大)诶,到底是要美观呢,还是效率与空间呢?呵呵,谢谢各位大侠们,暂时只能这样了(虽然俺还有点不死心,希望能找到更好的办法,呵呵)
      

  9.   

    不知道在VB Net 里有没有直接的属性可以设置?
      

  10.   

    可恶,MS自己的菜单不会发生这样的事情。
    在快捷菜单组里,就算是单&符号的文件名,也能正确显示的。
      

  11.   

    肯定在装入菜单前转换过了,何必非要指望 API,自己写一个就是了。