今度はC#めも

さてさて、今日はC#。

あるコントロールの周りに枠を付けたいと思いました。


さて、どうしよう。

まず、Panelコントロールを置き、そのBorderStyleプロパティの値を、FixedSingleかFixed3Dにすることで、枠を作ります。
FixedSingleは実線の枠。Fixed3Dは凹んだように見える枠です。
そして、その中に目的のコントロールを置いて、DockプロパティをFillにすれば、はい完成。

なのですが、僕が作りたいのは出っ張って見える凸枠でした。
Panel以外にも、GroupBoxLabelなど、色々試してみたのですが、どれも凹むだけで出っ張ってくれません。

こうなりゃ自分で描くかー!!
ってことで、Panelの描画部分をオーバーライドして、そこで自分で線を引くことにしました。


public class ConvexPanel : System.Windows.Forms.Panel
{
private System.ComponentModel.Container components = null;
public ConvexPanel() {
InitializeComponent();
}
protected override void Dispose( bool disposing ) {
if( disposing ) {
if(components != null) {
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent() {
// ConvexPanel
this.Name = "ConvexPanel";
this.DockPadding.All = 1;   // 枠が隠れないように
}
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint (e);
if (!this.Visible) return;
Graphics g = e.Graphics;
Pen pen;
int r = this.ClientRectangle.Right - 1;
int b = this.ClientRectangle.Bottom - 1;
pen = new Pen(SystemColors.ControlLightLight);  // 光
g.DrawLine(pen, 0, 0, r, 0);  // 上
g.DrawLine(pen, 0, 0, 0, b);  // 左
pen = new Pen(SystemColors.ControlDark);    // 影
g.DrawLine(pen, r, 0, r, b);  // 右
g.DrawLine(pen, 0, b, r, b);  // 下
}
}

青字になってるところは全部デザイナが勝手に作ってくれました。
らくちんらくちん。

で、これと同じようにスクロールバーもかっちょいいデザインに変更できないかな~って思ったんだけど、ダメでした。
どうもOnPaintメソッドが呼ばれないっぽい。
とはいえ完全自作はめんどっちぃし、もうちょっと研究してみるか。

コメントを残す