私のプロジェクトでWinformのPropertyGrid
を使用していますが、すべてうまく動作しますがタブの順序です。タブを使用してwinformプロパティグリッドのプロパティ間を移動する方法
私はのタブを押したにもかかわらず、次のプロパティに切り替える必要がありますが、選択がプロパティグリッドから次のコントロールに移動します。私はこれをどうやってやるのか把握できないのですか?
おかげ
私のプロジェクトでWinformのPropertyGrid
を使用していますが、すべてうまく動作しますがタブの順序です。タブを使用してwinformプロパティグリッドのプロパティ間を移動する方法
私はのタブを押したにもかかわらず、次のプロパティに切り替える必要がありますが、選択がプロパティグリッドから次のコントロールに移動します。私はこれをどうやってやるのか把握できないのですか?
おかげ
我々は、我々がコントロールのデフォルトタブ動作を変更することができPropertyGrid
の内部部品に掘る必要があります。始めに派生したPropertyGrid
を作成し、そのProcessTabKey
メソッドをオーバーライドする必要があります。
この方法では、まずPropertyGridView
コントロールがインデックス2にあるControls
コレクション内にあります。その後、Reflection
を使用して、そのallGridEntries
フィールドを取得します。このフィールドは、すべてGridItem
要素を含むコレクションです。すべてのグリッドのアイテムを見つけた後
、コレクション内のSelectedGridItem
のインデックスを見つけて、それが最後の項目ではありませんかどうかを確認し、インデックスで次の項目を取得し、アイテムのSelect
方法を使用してそれを選択します。
using System.Collections;
using System.Linq;
using System.Windows.Forms;
public class ExPropertyGrid : PropertyGrid
{
protected override bool ProcessTabKey(bool forward)
{
var grid = this.Controls[2];
var field = grid.GetType().GetField("allGridEntries",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
var entries = (field.GetValue(grid) as IEnumerable).Cast<GridItem>().ToList();
var index = entries.IndexOf(this.SelectedGridItem);
if (forward && index < entries.Count - 1)
{
var next = entries[index + 1];
next.Select();
return true;
}
return base.ProcessTabKey(forward);
}
}
私が解決策を投稿するのを止める唯一のことは、次の表示項目(現在の項目群外)を取得する方法です。他のすべては私の側からうまくいくようです。 – user3185569
Tabキーをうまく処理する商用ソリューションがあります。それはあなたのための選択肢ですか? –
Nicに感謝しますが、私はそれが今の選択肢ではないと思います。 – Muds