web-dev-qa-db-ja.com

C#WinForms-フォームが選択されていない場合のカスタムボタンの不要な境界線

C#winフォームで作成したカスタムボタンに問題があります。フォームを選択するとボタンは正常に表示されますが、フォームから離れるとすぐにボタンに境界線が表示されます。これが発生する良い例は、デスクトップがクリックされたが、フォームがまだ最大化されているため、その内容が表示される場合です。問題の画像を以下に示します。

Button border problem

これはすべてのボタンで発生するわけではなく、ボタンが前にクリックされた場合にのみ発生します(一度に1つのボタンにのみ表示されます)。これは、ボタンのフォーカスキューと関係があると信じるようになりましたが、これらはfalseに設定されています。境界線は0に設定されており、タブストップもfalseに設定されています。

助言がありますか?

38
Jpin

カスタムボタンを扱う場合は、以下を設定する必要があります。

button.TabStop = false;
button.FlatStyle = FlatStyle.Flat;
button.FlatAppearance.BorderSize = 0;

ButtonBaseColor.Transparentの境界線の色をサポートしていないため、Argbの色を設定することで問題を克服できます。

button.FlatAppearance.BorderColor = Color.FromArgb(0, 255, 255, 255); //transparent
96
Omar

fuexの答えは理論的には境界線を削除できますが、ボタンの有効化ステータスを変更した後でも、ボタンにフォーカスキューが残っている場合があるバグがあります。

(.Net 4.0でこのバグに遭遇しましたが、バグが修正されたのか、後のバージョンで修正されたのかわかりません).

このバグを回避するには、ShowFocusCuesプロパティを無効にする必要があります。

protected override bool ShowFocusCues
{
    get
    {
        // return base.ShowFocusCues;
        return false;
    }
}
3
FrankX