C# プロジェクトで .NET PropertyGrid コントロールを使用しています。
グリッドを含むフォームが読み込まれると、水平スプリッター (説明から設定を分割する) がデフォルトの位置になります。C# でそのスプリッターの位置をプログラムで変更するにはどうすればよいですか?
C# プロジェクトで .NET PropertyGrid コントロールを使用しています。
グリッドを含むフォームが読み込まれると、水平スプリッター (説明から設定を分割する) がデフォルトの位置になります。C# でそのスプリッターの位置をプログラムで変更するにはどうすればよいですか?
このコードは、The Code Project の記事 ( http://www.codeproject.com/KB/grid/GridDescriptionHeight.aspx ) に基づいており、2 つの修正といくつかのクリーンアップが導入されています。
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);
}
}
私は自分のプロジェクトでそれを使用しました。それはあなたのためにうまくいくはずです。
そして、これが VB.Net の Matthew Ferreira のソリューションです。ありがとうございます。
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
これは、PropertyGrid コントロールによって公開されたパブリック メソッドとプロパティでは実行できません。または、少なくとも有用なものが見つかりませんでした。
リフレクションを使用して、設定または説明を表示するプロパティ グリッドのサブコントロールを取得し、それらの高さをプログラムで設定しようとする場合があります。スプリッターはドッキングされているだけで、位置を設定しても何も変わらないと思います。
デバッガーで PropertyGrid の非パブリック メンバーを確認すると、コントロールの内部構造を理解するのに役立ちます。