2011-07-20 18 views
4

に応じて有効にします。コンテキストに応じて、フォームのコントロールを有効または無効にする正しい方法を知っていますか?問題は、私は自分のフォーム上に約50のコントロールがあり、その状態はいくつかのリストで選択された項目に依存し、チェックボックスがチェックされ、DB上のいくつかのデータが存在するかどうかである。Windowsフォームは、無効にするコントロールを

非常に大雑把な例は、マルチ選択ツリービューと「比較」のようなボタンがある場合です。このボタンは、ツリービューで選択したノードがすべて同じ種類の場合にのみ有効にする必要があります。さらに、2つのノードを選択した場合にのみ有効にする必要があります。もう1つは、すべてのクラスを比較できるわけではないので、比較を可能にするために正確に選択すべきものには制限があります。

質問はControl.Enabled = true/falseではありません。質問は一般的なアプローチに関するものです。

ありがとうございました。

+0

そうした複雑なルールがある場合は、手動で行う必要があるかもしれないと思います。 – Ian

答えて

1

WPFにはVisual State Managerというものがありました。 WinFormsでも同様のことを実装できます。基本的にフォームには状態があり、コントロールの変更は状態でのみ許可されるべきです。次に状態を変えるためにトランジションを呼び出します。少なくともすべての変更コードは、状態マネージャによって呼び出されたどこかのメソッドで削除される可能性があります。 WPFでは

http://windowsclient.net/wpf/wpf35/wpf-35sp1-toolkit-visual-state-manager-overview.aspx

私はデザイナーのサポートのいくつかの並べ替えがあると思います。 WinFormsでは、ローカライゼーションがフォーム上でどのように機能するのかといったようなことが起こる可能性がありますが、それは関係しています。

私は、ストリング州の名前と対応する代理人を呼び出すメソッドのリストを取った1つのプロジェクトの粗州のマネージャーを行いました。そして、すべての修正コードをメソッドに保持し、フォームについては装飾しないことは良い習慣です。

+0

私は、フォームを一連の機能として扱い、各機能をステートパターンの方法で実装することについて考えていました。 ICompareItemsFeature、IAddItemFeatureなどと同様です。コントロールイベントハンドラによって、私はトランジションを行います。 – agibalov

1

が、これはあなたにあるかもしれないどのように役立つかわからないけど、非常に多くのコントロールが条件の限定された/制約セットに行動を取る必要があるとき私の場合には、その後、私のアプローチは、以下のとおりです。

  1. を無効にしますすべてのコントロールはデフォルトで使用され、使用に必要な条件が満たされた場合にのみ任意のコントロールが有効になります。これにより、ユーザーがコントロールを使用することができる視覚的な手がかりを得ることができますが、コントロールが再び無効になるように条件が失われたときにチェックする必要があるため、より多くの作業が必要になります。

  2. すべてのコントロールをデフォルトで有効または有効にしますが、必要な条件が満たされた場合にのみユーザーの操作に対処または応答します。

しかし、あなたが言うかもしれないように、これらのアプローチはうまく一般化しない場合があります、そしてあなたがコントロールに代わってアクション/コンテキストを観察し、パターンのいくつかの並べ替え/インタフェースを実装する必要がある、とありますがオン/オフしてオン適切な条件が満たされたとき。

1

もう一つのアイデアは次のようになります。状態管理を必要とするすべてのコントロールは、それが特定の通知状態だ定義し、すべての子どもに意味AsbtractControlクラスを実装することです。

が異なるコントロールから受け取った「フック」イベントは、AsbtractControlのようにそれらをキャストすることを、あなたのアプリにEventManagerを実装しStateStackにだけ、ユーザによって「活性化」制御によって暗黙の状態を押してください。

は、すべてのアクションStateStackに解析し、有効/ UI上のコントロールを無効にしてもクリア/または作らdesitionに基づいて積み重ねないDesitionalEngineを実装します。あなたが言ったように、Enable/Disableは複数のコントロールアクションに基づいて行うことができます。

あなたに別のアイデアを与えるだけで、私は何年も前にWinFormsを実装していたことを思い起こさせることができます。

これが役に立ちます。

よろしくお願いいたします。

0

オブジェクトモデルを使用している場合、すべてのコントロールの状態を維持するのが簡単です。

関連する問題