C# 프로젝트에서 .NET PropertyGrid 컨트롤을 사용하고 있습니다.PropertyGrid 컨트롤의 가로 분할자를 프로그래밍 방식으로 어떻게 조정합니까?
그리드가 포함 된 양식이로드되면 가로 스플리터 (설명에서 설정을 나눕니다)는 기본 위치에 있습니다. 프로그래밍 방식으로 C#에서 해당 스플리터의 위치를 어떻게 변경합니까?
C# 프로젝트에서 .NET PropertyGrid 컨트롤을 사용하고 있습니다.PropertyGrid 컨트롤의 가로 분할자를 프로그래밍 방식으로 어떻게 조정합니까?
그리드가 포함 된 양식이로드되면 가로 스플리터 (설명에서 설정을 나눕니다)는 기본 위치에 있습니다. 프로그래밍 방식으로 C#에서 해당 스플리터의 위치를 어떻게 변경합니까?
이 코드는 코드 프로젝트의 기사 (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);
}
}
나는 내 프로젝트에서이 파일을 사용했습니다. 그것은 당신을 위해 잘 작동해야합니다.
PropertyGrid 컨트롤에 의해 공개 된 공용 메서드 및 속성으로는이 작업을 수행 할 수 없으며 적어도 유용한 것은 찾을 수 없습니다.
리플렉션을 사용하여 설정 또는 설명을 표시하는 속성 표의 하위 컨트롤을 가져 와서 프로그래밍 방식으로 높이를 설정하려고 할 수 있습니다. 스플리터가 도킹 된 것 같아서 위치를 설정해도 아무 것도 바뀌지 않습니다.
PropertyGrid의 비공개 멤버를 디버거로 보면 컨트롤의 내부 구조를 쉽게 찾을 수 있습니다.
그리고 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
Worked Great. 좋은 가치를 발견하기 전에 Line의 가치를 가지고 놀아야했는데, Line이 나타내는 것보다 적은 숫자 <10이 필요한 것 같았습니다. – PICyourBrain
그것은 나를 위해 효과가 없었습니다. 이 코드는 Form이로드 될 때까지 작동하지 않습니다. 그 전에는 설명 영역이 0 행으로 높아집니다. – Qwertie
이 질문이 처음으로 제기 된 지 오래되었지만 아직 도움을 드리고자합니다. Form.OnShown에서이 함수를 호출합니다. 그것을 밖으로 시도, 그 경우에 작동합니다. –