7

標準の WinForms 2.0PropertyGridコントロールを使用して、コントロールの境界線の色を変更するか、境界線を完全に削除する方法を探しています。

ここに画像の説明を入力

残念ながら、セル間の内側の境界線のみを変更するLineColorプロパティを認識しています。

さらに、ILSpyを使用してコントロールのソース コードを調べましたが、PropertyGrid意味のあるものは何も見つかりませんでした。

私の質問は:

コントロールの外枠を削除する方法、PropertyGridまたは外枠の色を変更する方法は?

更新 2012-05-04 - 解決策 (別名「ハック」):

Jamie の回答に基づいて、実用的なソリューションを組み立てました (ここからダウンロードできます)。

ここに画像の説明を入力

アイデアは、プロパティ グリッドをパネル内に配置し、パネルがコントロールをクリップできるようにすることです。

このアプローチでは、クリッピング パネルをPadding「1」(または境界線にしたいもの) を持つ別のパネルに配置し、このパネルBackColorに境界線の色 (私の例では緑) として機能する を与えました。

プロパティ グリッドの Anchor を「Left, Right, Top, Bottom」に設定しDock、クリッピング パネルの を「Full」に設定します。

ここに画像の説明を入力

これは私の要件に適しています。これは、保存できると思っていた 2 つのパネルのリソースを消費するため、一種のハックだと思います。

4

5 に答える 5

2

私の最初の答えはこの特定のコントロールには適していないように思われるので、これは別の選択肢です。これは汚いトリックですが、うまくいくはずです:

パネルコントロールをウィンドウまたはダイアログに配置します。たとえば、サイズが100Hx300Vの場合です。プロパティグリッドを位置-1、-1、サイズ102,302でパネル内に配置します。

于 2012-05-04T08:24:29.320 に答える
1

そのためには、少しの相互運用が必要になります。

[DllImport("User32", CharSet=CharSet.Auto)]
private static extern int SetWindowLong(IntPtr hWnd, int Index, int Value);
[DllImport("User32", CharSet=CharSet.Auto)]
private static extern int GetWindowLong(IntPtr hWnd, int Index);

int GWL_STYLE = -16;
int WS_BORDER = 0x00800000;
IntPtr hWnd = yourPropertyGrid.Handle;

int style = GetWindowLong(hWnd, GWL_STYLE);
style = style & ~WS_BORDER;
SetWindowLong(hWnd, GWL_STYLE, style);
于 2012-05-04T06:01:46.050 に答える
0

このコードは機能します。

private void SetHelpBoderColor(bool showBorder)
{
    if (showBorder)
    {
        //Set Default ViewBackColor
        PropertyInfo viewBackColor = this.propertyGrid.GetType().GetProperty("ViewBorderColor");
        if (viewBackColor != null)
            viewBackColor.SetValue(this.propertyGrid, SystemColors.ControlDark, null);

        //Set Default HelpBorderColor
        PropertyInfo helpBorderColor = this.propertyGrid.GetType().GetProperty("HelpBorderColor");
        if (helpBorderColor != null)
            helpBorderColor.SetValue(this.propertyGrid, SystemColors.ControlDark, null);

    }
    else
    {
        //Set ViewBackColor
        PropertyInfo viewBackColor = this.propertyGrid.GetType().GetProperty("ViewBorderColor");
        if (viewBackColor != null)
            viewBackColor.SetValue(this.propertyGrid, SystemColors.Control, null);

        //Set HelpBorderColor
        PropertyInfo helpBorderColor = this.propertyGrid.GetType().GetProperty("HelpBorderColor");
        if (helpBorderColor != null)
            helpBorderColor.SetValue(this.propertyGrid, SystemColors.Control, null);
    }

    if (DesignMode)
    {
        Parent.Refresh();
    }
}
于 2016-05-11T10:06:12.073 に答える