C#winフォームで作成したカスタムボタンに問題があります。フォームを選択するとボタンは正常に表示されますが、フォームから離れるとすぐにボタンに境界線が表示されます。これが発生する良い例は、デスクトップがクリックされたが、フォームがまだ最大化されているため、その内容が表示される場合です。問題の画像を以下に示します。
これはすべてのボタンで発生するわけではなく、ボタンが前にクリックされた場合にのみ発生します(一度に1つのボタンにのみ表示されます)。これは、ボタンのフォーカスキューと関係があると信じるようになりましたが、これらはfalseに設定されています。境界線は0に設定されており、タブストップもfalseに設定されています。
助言がありますか?
カスタムボタンを扱う場合は、以下を設定する必要があります。
button.TabStop = false;
button.FlatStyle = FlatStyle.Flat;
button.FlatAppearance.BorderSize = 0;
ButtonBase
はColor.Transparent
の境界線の色をサポートしていないため、Argbの色を設定することで問題を克服できます。
button.FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 255); //transparent
fuexの答えは理論的には境界線を削除できますが、ボタンの有効化ステータスを変更した後でも、ボタンにフォーカスキューが残っている場合があるバグがあります。
(.Net 4.0でこのバグに遭遇しましたが、バグが修正されたのか、後のバージョンで修正されたのかわかりません).
このバグを回避するには、ShowFocusCues
プロパティを無効にする必要があります。
protected override bool ShowFocusCues
{
get
{
// return base.ShowFocusCues;
return false;
}
}