2013-10-10 3 views
3

메뉴 항목의 내용을 확인해야하는 작업의 구현에 대해 작업하고 있습니다. 메뉴 항목 제목 + 바로 가기 키 (도움말 F1)UI 자동화를 사용하여 메뉴 항목을 확인하는 방법은 무엇입니까?

screen1

을 포함하지만 난이 메뉴의 바로 가기 키 (F1)이이 있는지 여부를 확인하는 문제에 직면했습니다. AutomationElement에는이 키에 대한 정보가 없습니다. AccessKey 및 AcceleratorKey가 비어 있습니다.

enter image description here

어떻게 UI 자동화를 통해 액세스 키에 액세스 할 수 있습니다? 감사.

+0

는 "ShortcutKeys"라는 속성이없는가? – BakaBoing

+0

모든 속성은 두 번째 스크린 샷에 있습니다. 그런 재산은 없습니다. –

답변

1

ToolStrip 종류의 메뉴에 대한 기본 구현은 니모닉 만 지원합니다. 예를 들어 "help" 대신 메뉴를 "&help"으로 선언하면 UI 자동화에 "Alt+h"이라는이 메뉴 항목이 액세스 키로 표시되어야합니다. 이 구현은 Fx, CTRL 등 다른 바로 가기 유형에서는 작동하지 않습니다.

검사 된 응용 프로그램을 소유하고 있으면 사용자 정의 액세스 키 문자열을 찾을 수 있습니다. 예를 들어 여기에 ToolStripMenuItem에서 파생 된 예제 클래스가 있으며 ShortcutKeyDisplayString (기본값은 ShortcutKeys으로 정의 된 경우에도 기본적으로 null입니다)에 설정된 값을 반환합니다.

MyItem item = new MyItem("Help"); 
item.ShortcutKeys = Keys.F1; 
item.ShortcutKeyDisplayString = "F1"; 
fileToolStripMenuItem.DropDownItems.Add(item); 

그리고 여기 샘플 클래스입니다 :

이 당신이 그것을 사용할 수있는 방법입니다

public class MyItem : ToolStripMenuItem 
{ 
    public MyItem(string text) 
     : base(text) 
    { 
    } 

    protected override AccessibleObject CreateAccessibilityInstance() 
    { 
     return new MyAccessibleItem(this); 
    } 

    // unfortunately we can't just derive from ToolStripMenuItemAccessibleObject 
    // which is stupidly marked as internal... 
    private class MyAccessibleItem : ToolStripDropDownItemAccessibleObject 
    { 
     public MyAccessibleItem(ToolStripMenuItem owner) 
      :base(owner) 
     { 
      Owner = owner; 
     } 

     public ToolStripMenuItem Owner { get; private set; } 

     public override AccessibleStates State 
     { 
      get 
      { 
       if (!Owner.Enabled) 
        return base.State; 

       AccessibleStates state = base.State; 
       if ((state & AccessibleStates.Pressed) == AccessibleStates.Pressed) 
       { 
        state &= ~AccessibleStates.Pressed; 
       } 

       if (Owner.Checked) 
       { 
        state |= AccessibleStates.Checked; 
       } 
       return state; 
      } 
     } 

     public override string KeyboardShortcut 
     { 
      get 
      { 
       return Owner.ShortcutKeyDisplayString; 
      } 
     } 
    } 
} 
+0

감사합니다. 하지만 AccessKey -H (& help)와 acceleratorKey (F1)를 동시에 사용하겠습니다. 제안 된 예제에서 acceleratorKey는 여전히 빈 문자열입니다. –

관련 문제