0

構成エディター フォームを作成していて、ちょっとした問題が発生しました。ユーザー フレンドリーで効率的な設計に多くの時間を費やしたTabIndexため、マウスの使用を最小限に抑えて完全に動作するようにしたいと考えています。

私の問題は、コントロールをタブで移動しようとするCheckBoxと、マウスで押した場合のようにフォーカスが得られないことに気づきました。これは、タブで移動して、キーボードから直接状態を変更できなかったことを意味します。

Enter を押すだけで KeyUp イベントを介して状態を変更できるようにするには 、およびCheckBoxを介してゲイン フォーカスを作成する方法を教えてください。TabIndexTabStop

以下は私のフォームの写真で、その隣には、クラス TabIndexから直接取得したコードと同様の写真があります。Form.Designer.cs

ここに画像の説明を入力

        // 
        // cbxDefaultPublic
        // 
        this.cbxDefaultPublic.AutoSize = true;
        this.cbxDefaultPublic.Location = new System.Drawing.Point(247, 12);
        this.cbxDefaultPublic.Name = "cbxDefaultPublic";
        this.cbxDefaultPublic.Size = new System.Drawing.Size(15, 14);
        this.cbxDefaultPublic.TabIndex = 1;
        this.cbxDefaultPublic.TabStop = true;
        this.cbxDefaultPublic.UseVisualStyleBackColor = true;

私はこれを説明するのに苦労したことに注意してください。これは少し複雑なため、説明する方法がわかりませんでした。

4

1 に答える 1

0

私の質問にコメントしてくれた人々の助けを借りて、何をすべきか、何を検索すべきかを正しく理解することができました。
Grant Winney、LarsTech、JohnnyBoy に感謝しCheckBoxます。

にはパブリック ハイライト機能がないことがわかったCheckBoxので、クリエイティブにならなければなりませんでした。
私がしたことは、カスタムを作成したことでしたCheckBox..コードを表示するだけかもしれません:P

public class MyCbx : CheckBox {
    protected override void OnGotFocus(EventArgs e) {
        base.OnGotFocus(e);
        base.OnEnter(e);
        base.OnMouseEnter(e);
    }
    protected override void OnLostFocus(EventArgs e) {
        base.OnLostFocus(e);
        base.OnLeave(e);
        base.OnMouseLeave(e);
    }
    protected override void OnMouseLeave(EventArgs e) {
        if(!this.Focused) {//prevent it from losing highligh if control is in focus
            base.OnMouseLeave(e);
        }
    }
}

そのため、フォーカスを取得または失ったときに MouseEnter および Leave イベントを呼び出します。これにより、強調表示された状態に変わります。

于 2016-01-20T01:10:11.797 に答える