私のアプリケーションでは、下の写真に示すようにコンボボックスを追加しました
コンボボックスのプロパティを次のように設定しました
cmbDatefilter.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
そして今、私の質問は、ボーダースタイルをコンボボックスに設定して見栄えを良くする方法です。
以下のリンクで確認しました
私の質問は以下のリンクとは異なります。
ComboBox
から継承し、 WndProc
をオーバーライドして、 WM_Paint
メッセージを処理し、コンボボックスの境界線を描画できます。
public class FlatCombo:ComboBox
{
private const int WM_Paint = 0xF;
private int buttonWidth= SystemInformation.HorizontalScrollBarArrowWidth;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_Paint)
{
using (var g = Graphics.FromHwnd(Handle))
{
using (var p = new Pen(this.ForeColor))
{
g.DrawRectangle(p, 0, 0, Width - 1, Height - 1);
g.DrawLine(p, Width - buttonWidth, 0, Width - buttonWidth, Height);
}
}
}
}
}
注:
BorderColor
プロパティを追加するか、別の色を使用できます。DrawLine
メソッドにコメントを付けることができます。RightToLeft
のときに(0, buttonWidth)
から(Height, buttonWidth)
まで線を引く必要がありますComboBox.FlatComboAdapter
クラスのソースコードを参照してください。CodingGorillaには正しい答えがあり、ComboBoxから独自のコントロールを取得してから、自分で境界線をペイントします。
これは、1ピクセル幅の濃い灰色の境界線をペイントする実際の例です。
class ColoredCombo : ComboBox
{
protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
using (var brush = new SolidBrush(BackColor))
{
e.Graphics.FillRectangle(brush, ClientRectangle);
e.Graphics.DrawRectangle(Pens.DarkGray, 0, 0, ClientSize.Width - 1, ClientSize.Height - 1);
}
}
}
もう1つのオプションは、親コントロールのペイントイベントで自分で境界線を描画することです。
Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint
Panel1.CreateGraphics.DrawRectangle(Pens.Black, ComboBox1.Left - 1, ComboBox1.Top - 1, ComboBox1.Width + 1, ComboBox1.Height + 1)
End Sub
-OO-