1

MDI Windows フォーム アプリケーションがあり、子フォームのほとんどに [OK] ボタンと [キャンセル] ボタンがあります。ただし、偶発的な保存/中止を防ぐために、ENTER/ESC キーでそれらをアクティブにしたくありません。したがって、フォームには AcceptButton と CancelButton の両方が none に設定されています。ESC ボタンは実際には何もしませんが、Enter ボタンは、TabOrder でソートされた最初のボタンを「クリック」してフォームを閉じます。

これはなぜですか?本当に回避策を実行して ENTER キーをキャッチする必要がありますか?

追加: OK、これはかなり奇妙です。Reflector は、どうやらタブ オーダーによる最初のコントロール (実際には、フォームを開いたときにデフォルトでアクティブになるコントロール) がボタンである場合、それがデフォルト コントロールとして割り当てられることを教えてくれます。そうでなければ、何も起こりません。質問は次のように変わります: WTF?!

4

3 に答える 3

0

OK ボタンはタブ オーダーの最初のコントロールであるため、フォームが読み込まれると自動的にキーボード フォーカスが取得されます。つまり、Enter キーを押すとクリックされます。キーボード フォーカスを別のコントロールに移動したい場合は、ActiveControl プロパティをフォーラムの別の要素に設定してみてください。

Button okButton = new Button();
TextBox someOtherControl = new TextBox();

// Add controls to form.
this.Controls.Add(okButton);
this.Controls.Add(someOtherControl);

// Specifically set the ActiveControl on the form.
this.ActiveControl = someOtherControl;
于 2010-03-23T13:49:27.447 に答える
0

私はちょうど同じ問題で立ち往生していました。長い間 WinForms を使用していませんでしたが、このような単純なことで何かが欠けているのではないかと考えました。

私の場合、いくつかのタスクの実行中に「OK」ボタンを非表示(または無効)にして、最後に表示したい...したがって、最初は「キャンセル」のみが表示され、常に「同意」です! AcceptButton を "Ok" または "None" に設定しても、"Ok" がフォームに表示された後でも、"Cancel" は Enter で動作します。両方のボタンが常に表示され、有効になっている場合 - それは正しいです。うーん... 正しいと思いましたが、これを読んだ後、ボタンの順序を切り替えてみました。はい、常に「受け入れる」のは最初のボタンです。

Form.AcceptButton は廃止され、現在は使用されていないようです。ただし、Form.CancelButton はまだ機能しています。これがHTMLでの動作方法であることは知っていますが、WinFormsでは...同じ「wtf」の質問があります。.NET 4.5。

于 2015-03-25T17:45:25.103 に答える