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のデフォルトである灰色です。
だから、私は黄色でそれを作る方法を教えてくれます。
独自の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);
}
}
Sinatraのようにカスタムパネルを作成したくない場合に備えて:
private void panel1_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle, Color.DarkBlue, ButtonBorderStyle.Solid);
}
この投稿は役に立ちました。
https://vicky4147.wordpress.com/2007/03/04/how-to-draw-a-custom-border-around-a-form-or-control/
また、パネルのパディングを境界線の厚さに設定して、パネル内のコントロールが境界線と重ならないようにして、非表示にします。私の場合、それ以外の場合はパディングを使用していなかったので良い解決策でしたが、境界線を表示するだけでなくパディングを使用する予定がある場合は、物事がよりトリッキーになるかもしれません...
パネルをサブクラス化する手間をかけたくない場合は、各次元で2ピクセル大きい別のパネルを作成し、境界線の色にして、境界線が必要なパネルのすぐ後ろに配置します。これは、IDE ...
カスタムパネルを作成するときの回避策の後。子コントロールのサイズ>パネルのサイズのときに境界線の重なりを解決するために、別の調整を適用する必要がありました。 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