2010-02-11 3 views

답변

7

이 코드는 코드 프로젝트의 기사 (http://www.codeproject.com/KB/grid/GridDescriptionHeight.aspx)를 기반으로하며 두 가지 수정 및 정리가 도입되었습니다.

private void ResizeDescriptionArea(PropertyGrid grid, int lines) 
{ 
    try 
    { 
     var info = grid.GetType().GetProperty("Controls"); 
     var collection = (Control.ControlCollection)info.GetValue(grid, null); 

     foreach (var control in collection) 
     { 
      var type = control.GetType(); 

      if ("DocComment" == type.Name) 
      { 
       const BindingFlags Flags = BindingFlags.Instance | BindingFlags.NonPublic; 
       var field = type.BaseType.GetField("userSized", Flags); 
       field.SetValue(control, true); 

       info = type.GetProperty("Lines"); 
       info.SetValue(control, lines, null); 

       grid.HelpVisible = true; 
       break; 
      } 
     } 
    } 

    catch (Exception ex) 
    { 
     Trace.WriteLine(ex); 
    } 
} 

나는 내 프로젝트에서이 파일을 사용했습니다. 그것은 당신을 위해 잘 작동해야합니다.

+0

Worked Great. 좋은 가치를 발견하기 전에 Line의 가치를 가지고 놀아야했는데, Line이 나타내는 것보다 적은 숫자 <10이 필요한 것 같았습니다. – PICyourBrain

+0

그것은 나를 위해 효과가 없었습니다. 이 코드는 Form이로드 될 때까지 작동하지 않습니다. 그 전에는 설명 영역이 0 행으로 높아집니다. – Qwertie

+0

이 질문이 처음으로 제기 된 지 오래되었지만 아직 도움을 드리고자합니다. Form.OnShown에서이 함수를 호출합니다. 그것을 밖으로 시도, 그 경우에 작동합니다. –

0

PropertyGrid 컨트롤에 의해 공개 된 공용 메서드 및 속성으로는이 작업을 수행 할 수 없으며 적어도 유용한 것은 찾을 수 없습니다.
리플렉션을 사용하여 설정 또는 설명을 표시하는 속성 표의 하위 컨트롤을 가져 와서 프로그래밍 방식으로 높이를 설정하려고 할 수 있습니다. 스플리터가 도킹 된 것 같아서 위치를 설정해도 아무 것도 바뀌지 않습니다.
PropertyGrid의 비공개 멤버를 디버거로 보면 컨트롤의 내부 구조를 쉽게 찾을 수 있습니다.

0

그리고 Matthew Ferreira의 VB.Net 솔루션입니다. Matthew에게 감사드립니다.

Imports System.Reflection 

    Public Sub ResizeDescriptionArea(grid As PropertyGrid, lines As Integer) 
     Try 
      Dim info = grid.[GetType]().GetProperty("Controls") 
      Dim collection = DirectCast(info.GetValue(grid, Nothing), Control.ControlCollection) 

      For Each control As Object In collection 
       Dim type = control.[GetType]() 

       If "DocComment" = type.Name Then 
        Const Flags As BindingFlags = BindingFlags.Instance Or BindingFlags.NonPublic 
        Dim field = type.BaseType.GetField("userSized", Flags) 
        field.SetValue(control, True) 

        info = type.GetProperty("Lines") 
        info.SetValue(control, lines, Nothing) 

        grid.HelpVisible = True 
        Exit For 
       End If 
      Next 

     Catch ex As Exception 
      Trace.WriteLine(ex) 
     End Try 
    End Sub