2013-01-09 2 views
2

시나리오에 상관없이 나는이 성가신 문제를 100 % 재현 할 수 있습니다. .Net 프로젝트, C# 또는 VB.Net을 만듭니다. 폼에 ToolStrip 컨트롤을 추가하십시오. 적어도 2 개의 메뉴 항목을 포함하는 몇 개의 간단한 DropDownButton을 생성하십시오. 원하는 다른 컨트롤, 목록 상자 (포커스를 올바르게받을 수 있도록 입력) 및 ComboBox 컨트롤을 추가하십시오. 키보드로 포커스를받을 수 있도록 바로 가기 키를 지정하거나 ToolStrip에서 TabStop을 활성화하십시오..Net Toolstrip/MenuStrip 포커스 문제

프로젝트를 실행하십시오 (디버그/릴리스, 당신이 멋진). 키보드를 사용하여 ToolStrip Focus를 탭 또는 바로 가기 키로 지정할 수 있습니다. 화살표로 하위 항목을 만듭니다. 이제 도구 상자 하위 메뉴를 축소하려면 이스케이프 키를 선택하십시오. Tab 키를 사용하여 ListBox 또는 ComboBox에 항목을 몇 개 포함합니다. 모두 괜찮아 보입니까? 이제 화살표 키를 사용하여이 컨트롤을 탐색하십시오. 깜짝! ToolStrip에 등을 대고 포커스가 있다고 생각했던 컨트롤은 그렇지 않습니다.

나는 여러 가지를 시도하여 ListBox에 포커스를두고 있습니다. 이 메뉴는 확장 한 번 것 같아 ...

ListBox.Focus(); 
ListBox.Select(); 

아무것도 성공 없었다 : 한 가지 예는 내가 (ListBox.Enter + = ...) OnEnter에 대한 이벤트 처리기를 추가하고 같은 일부 코드를 추가 할 것입니다 toolstrip 당신은 키보드를 사용하여이 컨트롤에 영원히 붙어있을 것입니다 ... 이것은 키보드 탐색만을 사용하는 시각 장애인들과 함께 작업한다는 사실 때문에 해결해야 할 중요한 문제입니다 ... 이것은 버그입니까? MFC에서 이것을 재현 할 수 없습니다 ...

어떤 제안이 있습니까?

업데이트 나는

System.Windows.Forms.MainMenu하지 않는 유일한 "도구 모음 개체"입니다 ...이 낯선를 재현하지 않는 컨트롤을 찾을 수 있었다

업데이트 ...

나는 아직도 (자신을 다른 사람에 대한 도움말 및) 일부하지만 위의에 대한 피드백을하고 싶습니다 ... 다른 사람처럼 행동이 근본적인 문제는 [ToolStripObject] .TabFocus 속성 ... 내에서 false로 설정하면 모두 정상적으로 작동하는 것처럼 보입니다 ... 포커스가있는 것처럼 보이게하는 컨트롤로 포커스를 되돌립니다. 그러나 시각 장애 사용자가 탭을 통해 모든 UI 컨트롤을 탐색 할 수 있도록하는 것이 편리한 기능입니다.이 속성이 너무 좋지 않아서이 속성이 정상적으로 작동하지 않습니다.

답변

2

ToolStripMenuItem를 재정 의하여 작업 :

public class ToolStripMenuItemEx : ToolStripMenuItem { 

    protected override bool ProcessCmdKey(ref Message m, Keys keyData) { 
    if (keyData == Keys.Escape) { 
     ToolStripDropDownButton tb = this.OwnerItem as ToolStripDropDownButton; 
     if (tb != null) { 
     tb.HideDropDown(); 
     return false; 
     } 
    } 
    return base.ProcessCmdKey(ref m, keyData); 
    } 
} 
+0

안녕 라스, 나는 당신의 하위 내가 이상 게시해야하는 시나리오 ToolStripMenuItem을 분류 구현입니다 ... (기본적으로에를 TabStop 필요) 실제로 도구 모음 번 더에 갇히게 종료 툴바 개체에 true로 설정된 TabStop 속성이 있는지 확인하십시오. – devHead

+0

메뉴 항목을 닫는 것이 문제의 일부는 아니며 정상적인 시나리오에서 이스케이프 키를 누르면 잘립니다. – devHead

+0

@Don 네, ToolStrip에 'TabStop = true'가 있습니다. 내가 설명했던 방식으로 양식을 만들었고 ToolStrip 드롭 메뉴에서 벗어나려고하면 기본적으로 화살표 키가 Tab 키처럼 작동한다는 것을 알았습니다. 게시 된 코드가 내 프로젝트의 유일한 코드이며 그것이 나를 위해 작동하게 만들었습니다. 메뉴를 닫으면 그 함수에 대해 true를 반환하면 문제가됩니다. 그래서 수동으로 숨길 수 있습니다. – LarsTech