首先,你要知道你使用了那些控制键,通常是shift,ctrl,alt
然后,对Shortcut.ToString()的结果(假设是CtrlShiftAltABC)进行检测,看包含了上面控制键中的哪几个,并获得他们的位置
第三,根据第二步的判断以及位置的确定,准备好控制键字串到一个得到:"Ctrl+Shift+Alt"
第四,使用Replace方法删除控制键
第五,把字母键进一步分离得到:"Ctrl+Shift+Alt+A+B+C"
代码如下:
string ConvertShortcut(Shortcut)
{
 string strShortcut=Shortcut.ToString();
 int intCtrl=-1,intShift=-1,intAlt=-1;
 string strRtn="";
 intCtrl=strShortcut.IndexOf("Ctrl");
 intShift=strShortcut.IndexOf("Shift");
 intAlt=strShortcut.IndexOf("Alt");
 if(intCtrl==0)
 {
  strRtn="Ctrl";
  if(intShift<intAlt)
  {
   if(intShift!=-1)
    strRtn+="+Shift";
   strRtn+="+Alt";
  }
  if(intAlt<intShift)
  {
   if(intAlt!=-1)
    strRtn+="+Alt";
   strRtn+="+Shift";
  }
 }
 if(intShift==0)
 {
  strRtn="Shift";
  if(intCtrl<intAlt)
  {
   if(intCtrl!=-1)
    strRtn+="+Ctrl";
   strRtn+="+Alt";
  }
  if(intAlt<intCtrl)
  {
   if(intAlt!=-1)
    strRtn+="+Alt";
   strRtn+="+Ctrl";
  }
 }
 if(intAlt==0)
 {
  strRtn="Alt";
  if(intShift<intCtrl)
  {
   if(intShift!=-1)
    strRtn+="+Shift";
   strRtn+="+Ctrl";
  }
  if(intCtrl<intShift)
  {
   if(intCtrl!=-1)
    strRtn+="+Ctrl";
   strRtn+="+Shift";
  }
 }
 strShortcut.Replace("Ctrl","");
 strShortcut.Replace("Shift","");
 strShortcut.Replace("Alt","");
 for(int i=0;i<strShortcut.Length;i++)
  strRtn+="+"+strShortcut[i];
 return strRtn;
}上面的应用可能有点麻烦,另外,string[i]我忘记是字符还是字符串了,如果是字符,则需要进行转换。

解决方案 »

  1.   

    我得OwnerDrawMenu中的代码:private string GetShortcutName(MenuItem item)
    {
    string shortcut,ret = "";
    shortcut = item.Shortcut.ToString();
    if(shortcut.IndexOf("Alt")>=0)
    {
    ret = "Alt+" + shortcut.Substring(3); 
    }
    else if(shortcut.IndexOf("CtrlShift")>=0)
    {
    ret = "Ctrl+Shift+" + shortcut.Substring(9); 
    }
    else if(shortcut.IndexOf("Ctrl")>=0)
    {
    ret = "Ctrl+" + shortcut.Substring(4); 
    }
    else if(shortcut.IndexOf("Shift")>=0)
    {
    ret = "Shift+" + shortcut.Substring(5); 
    }
    return ret;
    }呵呵,没有triout兄考虑的周到,但是一般的菜单,我这里足够用了。