3

いくつかのフォームがあるアプリケーションがあります。.NET 4.O で構築された C# Windows フォーム ベースのアプリケーションです。ユーザーがデータを入力するフォームがいくつかあります。データが表示されるグリッドと、フォーム上の多数のコントロールがあります。私を信じてください!その非常に多くのコントロールの混乱。TabIndexfor each コントロールをセットアップする必要があります。私は文字通りTabStop、特定のコントロールのプロパティを無効にしました。ただし、必要な順序を通過したら、タブを押して動作しますが、最後のボックスに到達すると、最初のフィールドに到達するまでに 3 ~ 4 倍のタブ移動が必要になります。を無効にしてみましたTabStop私が望まないコントロールのプロパティ。しかし、表示されない特定のコントロールがあると思いますが、それらは Tab プロパティに含まれている可能性があります。私の質問はTabStop、winform のすべてのコントロールのプロパティをfalse設定してからtrue、含めたいコントロールのみに設定できる方法があるということです。

また、これを実装できる他の方法があるかどうかを確認しますか?

さらに説明が必要な場合は、お知らせください。

必要な順序で画像を添付してループバックしましたが、どういうわけか機能しません。さらに、フォームには 2 つのパネルもあり、それらのTabStopプロパティを無効にしましたFalseここに画像の説明を入力

4

3 に答える 3

3
  1. Viewメニューに移動し、 をクリックしますTab Order。これにより、フォームのタブ オーダー選択モードが有効になります。TabIndex値は、各コントロールに数値として表示されます。
  2. コントロールをクリックして、タブ化する必要があります。これにより、コントロールの適切な値が設定されTabIndexます。
  3. 終了したら、Viewメニューに移動してオフにしTab Orderます。
  4. タブ化して設定したくないコントロールを選択しますTabStop = false
于 2012-10-25T15:10:24.637 に答える
2

簡単な説明の 1 つは、重なっている別のコントロールの下にあるコントロールを失ったことです。または、フォームの端を越えて配置されています。それを見つけるための良いツールは、View + Other Windows + Document Outline です。

それでも解決しない場合は、ラベルとタイマーを追加して診断します。Tick イベント ハンドラーを次のように記述します。

private void timer1_Tick(object sender, EventArgs e) {
    if (this.ActiveControl != null) label1.Text = this.ActiveControl.Name;
}
于 2012-10-25T15:44:00.863 に答える
2

次のコードを試してください。

foreach (Control ctrl in this.Controls) 
ctrl.TabStop = false;

また、最後のタブインデックスを確認することもできます。次に、form.designers.cs に移動し、tabindex が大きいすべてのコントロールを見つけて削除します。

ctrlTabStop = false;

私はこれをテストしていないので、注意してください: *.designer.cs を事前にバックアップしてください。

于 2012-10-25T13:48:38.420 に答える