3

これはstackoverflowに関する私の最初の質問ですので、間違いがあった場合はご容赦ください。

背景: Cameraオブジェクトからのゲインや露出などのステータスを表示するWinformPropertyGridがあります。ユーザーは、PropertyGridを介してカメラのプロパティを簡単に制御/編集できます。一方、カメラオブジェクトは、物理カメラから定期的に最新のステータスを照会し、INotifyProperfyChangedを介してPropertyGridを更新します。

問題: ユーザーがpropertygridでデータを入力/編集しているときに(新しいシャッター時間の値を入力するなど)更新が行われた場合、フォーカスが突然失われ、入力された値がカメラからの新しい値に置き換えられます。その結果、UIエクスペリエンスが不利になりました。

質問: ユーザーが編集を行っているときにPropertyGridが更新を実行しないようにするにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

2

編集 (1:54 PM CST) : 更新コード/メソッド呼び出しをラップして更新を行うため、必要なコードは次のとおりです。

if(FindFocusedControl(this).GetType().ToString() != "GridViewEdit")
{

}

これは、アクティブなコントロール (この場合はプロパティ グリッド内のセル) がアクティブであるかどうかを確認し、true の場合はネストされたコードをスキップします。


この SO の質問と回答の次の方法を利用すると、If 条件で更新を行うコードをラップして、どのコントロールがフォーカス/使用されているかを確認できるはずです。使用中のコントロールがプロパティ グリッドの場合は、何もしないでください。

    public static Control FindFocusedControl(Control control)
    {
        var container = control as ContainerControl;
        while (container != null)
        {
            control = container.ActiveControl;
            container = control as ContainerControl;
        }
        return control;

    }

試してみたい場合は、フォームに渡して結果を確認してください。

var a = FindFocusedControl(this);

あなたは新しいユーザーなので、これがうまくいく場合は、提供された回答の左側にあるチェックマークをクリックして、回答を受け入れることができます。これにより、他のユーザーが後であなたの質問に出くわしたときに、何がうまくいったかを知ることができます。

于 2012-07-10T18:13:13.870 に答える