これは奇妙な質問のように聞こえるかもしれませんが、私は FormBorderStyle を None に設定した C# Winform を持っています。これまでのところすべて問題ありませんが、フォームの周りに 1px の境界線を追加する方法があるかどうか疑問に思っていましたか? 自分のイメージを作成することでそれができることは知っていますが、もっと自然な方法があるかどうか疑問に思っていました. ありがとう
6 に答える
画像を使用したり、GDI+ を使用して簡単に描画できるものに不要なコントロールを作成したりするのは、リソースの無駄だと考えています。
OnPaint
最も簡単な解決策は、フォームのメソッドをオーバーライドして、自分で境界線を描くことだと思います:
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Black, this.Bounds);
}
もちろん、おPen
好きな色や幅でお使いいただくこともできます。
提案をありがとう、私は4つの1pxラベルを作成し、両側の端にトスすることにしました。そのように:1。グループボックスまたはパネルを使用する場合、彼らは真ん中全体を占めるのではなく、側で自分のビジネスを気にしています。2.境界線の色を変更することを選択できます。
フォームにa を追加Panel
(およびその境界線を設定) するのはどうですか?
それを行うためのより自然な、または非自然な方法はありません。それはあなたが望むものに依存します。
フォームに背景画像を配置する場合、サイズ変更可能な背景画像をサポートできるようにするためには、サイズ変更可能な背景画像が必要であるという事実を考慮する必要があります。
またはを使用して背景に単純に描画する場合は、サイズ変更可能なフォームもサポートできますが、何かクールなことをしたい場合は、より多くの作業を行う必要があり、代わりに画像を使用する方が簡単です。Pen
Brush
フォーム内にいくつかのコントロールを埋め込むことができ、それらの色で境界線を感じさせることができます. コントロールと同様にPanel
、コメントで提案されているように、GroupBox
周囲に薄いブロードを作成するために使用できます。
このメソッドを作成したので、ボーダーの位置、色、太さを簡単に設定できます。
private void customBackgroundPainter(PaintEventArgs e, int linethickness = 2, Color linecolor = new Color(), int offsetborder = 6)
{
Rectangle rect = new Rectangle(offsetborder, offsetborder, this.ClientSize.Width - (offsetborder * 2), this.ClientSize.Height - (offsetborder * 2));
Pen pen = new Pen(new Color());
pen.Width = linethickness;
if (linecolor != new Color())
{
pen.Color = linecolor;
}
else
{
pen.Color = Color.Black;
}
e.Graphics.DrawRectangle(pen, rect);
}
次のような場合に使用できますOnPaintBackground
。
protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
customBackgroundPainter(
e,
linethickness: 3,
linecolor: Color.DarkOrange,
offsetborder: 5
);
}