web-dev-qa-db-ja.com

パネル境界線の色を変更する方法

IDE:Visual Studio、C#.net、Type = Windowsフォームアプリケーション

こんにちは、パネルのプロパティで、境界線のスタイルを「固定シングル」に設定しました。
アプリケーションを実行しているとき、灰色になります。境界線の色を変更する方法がわかりません。パネルのペイントイベントで試しました

private void HCp_Paint(object sender, PaintEventArgs e)
{
    Panel p = sender as Panel;
    ControlPaint.DrawBorder(e.Graphics, p.DisplayRectangle, Color.Yellow, ButtonBorderStyle.Inset);
}

このような境界線を私に与えます:

http://i772.photobucket.com/albums/yy9/yogeshkmrsoni/giving_zps877730fc.png

そして、私はこのような固定された単一の境界線が欲しい:

http://i772.photobucket.com/albums/yy9/yogeshkmrsoni/want_zps081e3591.png

FixedSingle Borderを取得できますが、システムまたはIDEのデフォルトである灰色です。

だから、私は黄色でそれを作る方法を教えてくれます。

19

独自のPanelクラスを作成し、クライアント領域に境界線を描画できます。

[System.ComponentModel.DesignerCategory("Code")]
public class MyPanel : Panel
{
    public MyPanel() 
    {
        SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        using (SolidBrush brush = new SolidBrush(BackColor))
            e.Graphics.FillRectangle(brush, ClientRectangle);
        e.Graphics.DrawRectangle(Pens.Yellow, 0, 0, ClientSize.Width - 1, ClientSize.Height - 1);
    }

}
11
Sinatr

Sinatraのようにカスタムパネルを作成したくない場合に備えて:

private void panel1_Paint(object sender, PaintEventArgs e)
{
     ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle, Color.DarkBlue, ButtonBorderStyle.Solid);
}
7
Raihan Al-Mamun

この投稿は役に立ちました。

https://vicky4147.wordpress.com/2007/03/04/how-to-draw-a-custom-border-around-a-form-or-control/

また、パネルのパディングを境界線の厚さに設定して、パネル内のコントロールが境界線と重ならないようにして、非表示にします。私の場合、それ以外の場合はパディングを使用していなかったので良い解決策でしたが、境界線を表示するだけでなくパディングを使用する予定がある場合は、物事がよりトリッキーになるかもしれません...

5
JPProgrammer

パネルをサブクラス化する手間をかけたくない場合は、各次元で2ピクセル大きい別のパネルを作成し、境界線の色にして、境界線が必要なパネルのすぐ後ろに配置します。これは、IDE ...

4
AndruWitta

カスタムパネルを作成するときの回避策の後。子コントロールのサイズ>パネルのサイズのときに境界線の重なりを解決するために、別の調整を適用する必要がありました。 Tweakでは、境界線を描画するパネルの代わりに、親コントロールによって描画されます。

    Public Class SharpPanel : Inherits Panel
      Sub New()
        Padding = New Padding(2)
        SetStyle(ControlStyles.SupportsTransparentBackColor, True)
        SetStyle(ControlStyles.ResizeRedraw, True)
        SetStyle(ControlStyles.UserPaint, True)
        SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        SetStyle(ControlStyles.ContainerControl, True)
        SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
        SetStyle(ControlStyles.ContainerControl, True)
        Width = 100
        Height = 100
        TabStop = False
     End Sub
     Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        MyBase.OnPaint(e)
        Dim p As Control = Me.Parent
        Dim gr As Graphics = p.CreateGraphics
        Dim rec As Rectangle = Me.ClientRectangle
        If Me.VerticalScroll.Visible Then
            rec.Width = rec.Width + SystemInformation.VerticalScrollBarWidth
        End If
        If Me.HorizontalScroll.Visible Then
            rec.Height = rec.Height + SystemInformation.HorizontalScrollBarHeight
        End If
        rec.Location = Me.Location
        rec.Inflate(1, 1)
        gr.DrawRectangle(New Pen(Color.Pink), rec)
End sub
End Class
0
Albert Alberto