Winform의 PropertyGrid
을 사용하고 있습니다. 프로젝트에서는 모두 잘되지만 탭 순서는 잘 작동합니다.Tab을 사용하여 winform 속성 표의 속성 사이를 이동하려면 어떻게합니까?
을 눌렀을 때 다음 속성으로 전환하고 싶지만 infact가 선택되면 다음 컨트롤로 속성 격자 밖으로 이동합니다. 이 일을 처리하는 방법을 알아낼 수 없습니까? 우리는 PropertyGrid
의 내부 부품에 파고해야
감사
Winform의 PropertyGrid
을 사용하고 있습니다. 프로젝트에서는 모두 잘되지만 탭 순서는 잘 작동합니다.Tab을 사용하여 winform 속성 표의 속성 사이를 이동하려면 어떻게합니까?
을 눌렀을 때 다음 속성으로 전환하고 싶지만 infact가 선택되면 다음 컨트롤로 속성 격자 밖으로 이동합니다. 이 일을 처리하는 방법을 알아낼 수 없습니까? 우리는 PropertyGrid
의 내부 부품에 파고해야
감사
는 우리가 기본 탭 컨트롤의 동작을 변경할 수 있습니다. 처음에는 파생 된 PropertyGrid
을 만들고 ProcessTabKey
메서드를 재정의해야합니다.
이 방법에서는 먼저 컬렉션의 인덱스 2에있는 컨트롤 PropertyGridView
컨트롤을 찾습니다. 그런 다음 Reflection
을 사용하여 모든 GridItem
요소를 포함하는 모음 인 해당 allGridEntries
필드를 가져옵니다.
모눈 항목을 모두 찾은 후 컬렉션에서 SelectedGridItem
의 인덱스를 찾아서 마지막 항목이 아닌지 확인하고 다음 항목을 인덱스로 가져 와서 항목의 Select
메서드를 사용하여 선택하십시오.
using System.Collections;
using System.Linq;
using System.Windows.Forms;
public class ExPropertyGrid : PropertyGrid
{
protected override bool ProcessTabKey(bool forward)
{
var grid = this.Controls[2];
var field = grid.GetType().GetField("allGridEntries",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
var entries = (field.GetValue(grid) as IEnumerable).Cast<GridItem>().ToList();
var index = entries.IndexOf(this.SelectedGridItem);
if (forward && index < entries.Count - 1)
{
var next = entries[index + 1];
next.Select();
return true;
}
return base.ProcessTabKey(forward);
}
}
답장을 보내 주셔서 감사합니다. Reza,하지만 어떻게 든 Tab을 누르면 ProcessTabKey가 맞지 않습니다. – Muds
아마 실수를 한 것입니다. 이 클래스를 프로젝트에 추가하고 폼을 인스턴스에 배치해야합니다. 나는 그것을 시험해 보았고 제대로 작동한다고 확신했기 때문에 대답을 적용하는 데 문제가 있다면 알려주세요. –
Reza 그게 제가 한 일입니다. 탭은 다른 곳에서 처리되고 processTab을 실행시키지 못합니까? 나는 탭 키를 처리하는 순서가 무엇인지 모르지만 무언가를 전파하지 않기 위해 뭔가를 멈추는 것입니다. – Muds
솔루션을 게시하지 못하게하는 유일한 방법은 (현재 항목 그룹 외부에서) 다음에 표시되는 항목을 가져 오는 방법입니다. 다른 모든 것은 내 편이 잘 보인다. – user3185569
Tab 키를 잘 처리하는 상용 솔루션이 있습니다. 그것은 당신을위한 선택입니까? –
감사합니다 닉,하지만 지금은 옵션이라고 생각하지 않습니다. – Muds