- 題名: buttonの枠線の消去
- 日時: 2008/09/19 18:03:21
- ID: 23031
- この記事の返信元:
- (なし)
- この記事への返信:
- [23033] Re[1]: buttonの枠線の消去2008/09/20 23:04:07
- ツリーを表示
言葉足らずですみませんでした。
私が実現したいのは非フォーカス時に枠線が完全に消えるボタンです。
H.K.R.様より頂いたヒント「ControlPaint.DrawButtonメソッド」を基に、
Buttonクラスを継承した独自クラスを作成し以下のように記述することで
(簡易的ですが)必要な機能が実現できました。
ありがとうございました。
// 最初に記述
using System.Windows.Forms.VisualStyles;
// 以下、派生クラス内の各種オーバーライド
private PushButtonState state = PushButtonState.Normal; // ボタンの状態格納変数
protected override void OnPaint(PaintEventArgs pe)
{
Rectangle rect = this.ClientRectangle; // ボタンの描画範囲
// 背景の描画(ボタンの状態により描画方法を分岐)
if (state == PushButtonState.Normal)
pe.Graphics.FillRectangle(Brushes.Gray, rect); // 背景の描画
else if (state == PushButtonState.Hot)
ControlPaint.DrawButton(pe.Graphics, rect, ButtonState.Normal);
else if (state == PushButtonState.Pressed)
ControlPaint.DrawButton(pe.Graphics, rect, ButtonState.Pushed);
// テキスト描画
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
pe.Graphics.DrawString(this.Text, this.Font, Brushes.Black, rect, sf);
}
protected override void OnMouseDown(MouseEventArgs mevent)
{
base.OnMouseDown(mevent);
state = PushButtonState.Pressed;
}
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
state = PushButtonState.Hot;
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
state = PushButtonState.Normal;
}
protected override void OnMouseUp(MouseEventArgs mevent)
{
base.OnMouseUp(mevent);
OnMouseEnter(mevent);
}
分類:[.NET]
フォームに配置した button に FlatStyle.Popup を指定して
マウスがボタンに乗ったときに外観が3Dになるようにしたのですが、
一方マウスを乗せていない時にはボタンの周りに灰色の枠線が表示されるようになりました。
この枠線を消したいのですが、どのようにすれば良いのでしょうか?