편집기 컨트롤은 PropertyGrid
의 자식 PropertyGridView
의 자식 인 GridViewEdit
컨트롤입니다.
편집 컨트롤을 찾고 이벤트 처리기를 Enter
이벤트에 할당 할 수 있습니다. 이 경우 SelectedGridItem
을 찾은 다음 EditPropertyValue
메서드를 호출하여 UITypeEditor
을 표시해야합니다.
private void propertyGrid1_SelectedObjectsChanged(object sender, EventArgs e)
{
var grid = propertyGrid1.Controls.Cast<Control>()
.Where(x => x.GetType().Name == "PropertyGridView").FirstOrDefault();
var edit = grid.Controls.Cast<Control>()
.Where(x => x.GetType().Name == "GridViewEdit").FirstOrDefault();
edit.Enter -= edit_Enter;
edit.Enter += edit_Enter;
}
private void edit_Enter(object sender, EventArgs e)
{
var item = this.propertyGrid1.SelectedGridItem;
if (item.GetType().Name == "PropertyDescriptorGridEntry")
{
var method = item.GetType().GetMethod("EditPropertyValue",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
var grid = propertyGrid1.Controls.Cast<Control>()
.Where(x => x.GetType().Name == "PropertyGridView").FirstOrDefault();
method.Invoke(item, new object[] { grid });
}
}
참고 : Enter
이벤트가 성가신이며, 계속해서 또 다시 반복 모달 편집자. 이것을 피하려면 제어의 Click
이벤트를 사용할 수 있습니다.
또 다른 옵션으로는
PropertyGrid
의
SelectedGridItemChanged
이벤트에 의존
e.NewSelection.GetType().Name == "PropertyDescriptorGridEntry"
다음 반사를 사용하여 선택한 그리드 항목의
EditPropertyValue
를 호출하면 확인할 수 있습니다.