2017-05-10 17 views
1

키보드가없는 PC에서 touch 응용 프로그램을 만듭니다. PropertyGrid을 사용하여 응용 프로그램 구성을 저장/저장하는 클래스를 관리합니다. 클래스를 설정 한 (시스템이 아닌) 사용자 정의 키보드로 propertyline 행을 편집해야합니다. UITypeEditor 이제 오른쪽 버튼을 클릭하면 맞춤 키보드가 표시됩니다.PropertyGrid의 속성 텍스트 상자를 클릭하여 속성 편집기 표시

행 시작 편집시 (텍스트 입력 이벤트와 유사), 또는 행 선택시 표시 할 수 있습니까? 당신이 PropertyGrid에서 볼

답변

0

편집기 컨트롤은 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 이벤트를 사용할 수 있습니다.

또 다른 옵션으로는 PropertyGridSelectedGridItemChanged 이벤트에 의존 e.NewSelection.GetType().Name == "PropertyDescriptorGridEntry" 다음 반사를 사용하여 선택한 그리드 항목의 EditPropertyValue를 호출하면 확인할 수 있습니다.