私のフォームには2つのボタンがあります。どちらも背景画像を持ち、フラットスタイルは「フラット」です。ボタンの境界線と無効な外観を変更する
フォーカスがボタンの上にあるTABキーをクリックすると、私はボタンで国境を点在しているしたいの代わりに固体の境界線の、内側のソリッドカラーの四角形を参照してください。ボタンをクリックすると
、いくつかの活動が起こっていると、ボタンが無効になっています。無効になっている間、ボタンのテキストの色はグレーに変わります。私はそれがテキストの色を変更しないようにします。これはWindowsの標準的な動作だと思いますが、ボタンを選択したときにテキストの色を変更しないでください。
これらのポイントを設定するプロパティはありません。私は目標を達成するために何をすべきですか?どんな助けも高く評価されます。
カスタムボタンも作成しましたが、上記の問題を解決することはできません。
私のカスタムボタンの塗装方法:
public partial class MyButton : Button {
protected override void OnPaint(PaintEventArgs pevent)
{
base.OnPaint(pevent);
// Set custom fore color
base.ForeColor = Color.FromArgb(0, 255, 254, 255);
// set the same forecolor even if the button is disabled
if (base.Enabled == false)
{
base.ForeColor = Color.FromArgb(0, 255, 254, 255);
}
} //OnPaint method ends
} // class ends
は、(1)&ためSoluitonを更新しました(2) は)(のOnPaintに次を追加しました:
private void init()
{
base.ForeColor = Color.FromArgb(0, 255, 254, 255);
base.FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 254); // Transparent border
}
protected override void OnPaint(PaintEventArgs pevent)
{
base.OnPaint(pevent);
if (base.ContainsFocus)
{
// Draw inner dotted rectangle when button is on focus
Pen pen = new Pen(Color.Gray, 3);
Point p = base.Location;
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
Rectangle rectangle = new Rectangle(4, 4, Size.Width - 8, Size.Height - 8);
ControlPaint.DrawFocusRectangle(pevent.Graphics, rectangle);
}
// Draw the string to screen
SizeF sf = pevent.Graphics.MeasureString(displayText, this.Font, this.Width);
Point ThePoint = new Point();
ThePoint.X = (int)((this.Width/2) - (sf.Width/2));
ThePoint.Y = (int)((this.Height/2) - (sf.Height/2));
//pevent.Graphics.DrawString(displayText, Font, new SolidBrush(this.ForeColor), ThePoint);
//pevent.Graphics.DrawString(displayText, Font, new SolidBrush(Color.FromArgb(0, 255, 254, 255)), ThePoint);
pevent.Graphics.DrawString(displayText, Font, new SolidBrush(Color.Black), ThePoint);
//this.Text = "";
}//OnPaint ends
// Avoids the inner solid rectangle shown on focus
protected override bool ShowFocusCues
{
get
{
return false;
}
}
をこれが正常に点線を描きます私のボタンの中にフォーカスを示す行。デフォルトの実線を取り除くために、私はShowFocusCues()をオーバーライドしました。
これは完全に1を解決するのに役立ちました。しかし、ポイント2では、100%の結果が得られません。 MyButtonクラスに "displayText"というプロパティを作成しました。 OnPaint()では、ForeColor、Color.FromARGBにSolidBrushを指定すると、テキストは表示されません。しかし、Color.Blackを渡すと、それを受け入れ、テキストを黒色で表示します。 ForeColorやカスタムカラーを受け入れず、デフォルトのカラーのみを受け入れないのはなぜですか?この単純な仕事のどこで私はまだ間違っていますか。フォームでbutton_paintを実装してみましたが、同じ結果が表示されます。
私はまだ間違っていますか?
'Focus'は、あなたが探しているキーワードです。 – nothrow
「button3_Paint(オブジェクト送信者、PaintEventArgs e)」のボタンテキストと境界線のスタイルと色を変更します。 – Sadaf
@husnain、カスタムボタンのペイントイベントが追加されました。 (2)の場合、btnをクリックしてアクティビティを実行するとEnabledがfalseに設定されます。しかし、コードが追加された後でも、テキストの色はクリックした後にのみ灰色になります。 REG境界線スタイル、私はどのように変更し、それを設定するのか分からない、あなたはsnaippetまたは使用する方法を表示できますか? -Thanks – Tvd