none
ボタンにフォーカスが当たっているときの青い四角の枠は表示されないようにしたい RRS feed

  • 質問

  • データテーブルのレコードを移動するために4つのボタンを使用しています。
    例えば,次のレコードを表示するためのボタンをクリックすると,このボタンにフォーカスが当たって,青い枠が表示されます。

    このときの青い枠が表示されないようにすることはできるのでしょうか。


    • 編集済み goodwave 2021年12月3日 7:32
    2021年12月3日 7:21

回答

  • まず確認しておきたいのですが、そのボタンはどのようにして実装されたものでしょうか
    クリックさえできれば良いのなら、ボタンではなくラベルを使う選択肢もあったのでは?

    もしも現在の実装が System.Windows.Forms.Button だとすれば、ボタンのコンストラクタで
    SetStyle(ControlStyles.Selectable, false);
    を呼び出しておくという方法があります。

    ただしこの方法を採用すると、マウス等が使えない環境で Tab キーと Space キーを使って操作するような事が不可能になってしまいます。

    あるいはキーボード操作は受け入れたいけれど、青枠は避けたいということであれば、Button の FlatStyle プロパティを Flat か Popup に変更するという手もあります。アクティブなコントロールの枠線が太くなる点は同じですが、フォーカス枠の色変化は抑えられるでしょう。FlayAppearance プロパティも合わせて設定すれば、色味を従来のボタンに近づける事もできます。

    もしくは、青色になるのが問題ではなく、ボタンを押し終わった後も着色され続けるのが嫌だというのであれば、Click イベント内にて『ActiveControl = null;』などを呼び出し、フォーカスを失わせてしまうという手もあります。(Tab キーでのフォーカス順は維持したいのであれば、ActiveControl を null にするのではなく、適切な TabIndex を持ったダミーコントロールをアクティブにする手もあり)

    • 回答としてマーク goodwave 2021年12月3日 18:29
    2021年12月3日 8:50

すべての返信

  • このときの青い枠が表示されないようにすることはできるのでしょうか。

    外観は少し変わってしまいますが、FlatStyle プロパティを Popup にしてはどうでしょう?


    • 編集済み KOZ6.0 2021年12月3日 8:33 文言訂正
    2021年12月3日 8:32
  • まず確認しておきたいのですが、そのボタンはどのようにして実装されたものでしょうか
    クリックさえできれば良いのなら、ボタンではなくラベルを使う選択肢もあったのでは?

    もしも現在の実装が System.Windows.Forms.Button だとすれば、ボタンのコンストラクタで
    SetStyle(ControlStyles.Selectable, false);
    を呼び出しておくという方法があります。

    ただしこの方法を採用すると、マウス等が使えない環境で Tab キーと Space キーを使って操作するような事が不可能になってしまいます。

    あるいはキーボード操作は受け入れたいけれど、青枠は避けたいということであれば、Button の FlatStyle プロパティを Flat か Popup に変更するという手もあります。アクティブなコントロールの枠線が太くなる点は同じですが、フォーカス枠の色変化は抑えられるでしょう。FlayAppearance プロパティも合わせて設定すれば、色味を従来のボタンに近づける事もできます。

    もしくは、青色になるのが問題ではなく、ボタンを押し終わった後も着色され続けるのが嫌だというのであれば、Click イベント内にて『ActiveControl = null;』などを呼び出し、フォーカスを失わせてしまうという手もあります。(Tab キーでのフォーカス順は維持したいのであれば、ActiveControl を null にするのではなく、適切な TabIndex を持ったダミーコントロールをアクティブにする手もあり)

    • 回答としてマーク goodwave 2021年12月3日 18:29
    2021年12月3日 8:50
  • KOZ6.0さん,魔界の仮面弁士さん,お陰さまで解決することができました。ありがとうございましたお礼を申し上げます。

    >まず確認しておきたいのですが、そのボタンはどのようにして実装されたものでしょうか
       System.Windows.Forms.Buttonです。

    >ボタンのコンストラクタでSetStyle(ControlStyles.Selectable, false);を呼び出しておくという方法があります。
       他にも沢山のボタンがありますので,それらに対する影響は避けたいと思いました。

    外観は少し変わってしまいますが、FlatStyle プロパティを Popup にしてはどうでしょう?
    Button の FlatStyle プロパティを Flat か Popup に変更するという手もあります。
       外観の変化を起こさない方法を模索していました。

    >適切な TabIndex を持ったダミーコントロールをアクティブにする手もあり
       質問する前にダミーのボタンのVisibleをfalseにして試してみましたが失敗していました。
       「適切な TabIndex を持ったダミーコントロール」と教えていただき,ダミーのボタンをpictureBoxの背後に隠すことで解決することができました。

    private void BtnNext_Click(object sender, EventArgs e)
            {
                btnDummy.Focus();
                if(iRow<iCnt)
                {
                    iRow++;
                    tbx_iPos.Text = iRow.ToString();
                    Atesaki(iRow);
                }
            }

    2021年12月3日 19:02
  • ところで BindingNavigator は使わないんでしょうか?

        using System;
        using System.Windows.Forms;
    
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                BindingSource source = new BindingSource();
                source.DataSource = new byte[10]; // 配列でもリストでもよい
                source.PositionChanged += Source_PositionChanged;
                bindingNavigator1.BindingSource = source;
                ShowPosition(source);
            }
    
            private void Source_PositionChanged(object sender, EventArgs e)
            {
                ShowPosition((BindingSource)sender);
            }
    
            private void ShowPosition(BindingSource source)
            {
                label1.Text = string.Format("現在の位置は {0}/{1}です。",
                                            source.Position + 1, 
                                            source.Count);
            }
        }
    


    2021年12月4日 6:30
  • K0Z6.0さん,BindingNavigatorのご紹介ありがとうございます。

    存在は知ってはいましたが,BindingNavigatorは今までに使ったことがなく,これで「抽出したレコード」を扱うことは老いた頭には敷居が高すぎるように感じてしまったことと,サイズを少しでも大きくしたいとの思いやデザインの好みで使用しなかったのでした。


    • 編集済み goodwave 2021年12月4日 19:49
    2021年12月4日 19:40