0

私は答えを求めているのではなく、より良い解決策を生み出すためのアイデアや提案を求めています。これは一般的なシナリオであるに違いないと感じているため、おそらくいくつかの基本的なオブジェクト指向設計理論への参照を探していますが、確実な検索結果を見つけるために正しく表現する方法がわかりません.

この例を示します (簡単に説明できるので、コードは割愛します)。1 つの Treeview、1 つの Button、および 1 つの Textbox を含む 1 つの Form があります。また、Text と Name の 2 つの文字列を持つ TextClass クラスもあります。

ボタンをクリックすると:

  • 新しい TreeNode を作成します。TreeNode に一意の名前 (例: "Instance1") を割り当て、それを Treeview に追加します。
  • クラス TextClass のインスタンスを作成します。一意の名前 (例: "Instance1") を TextClass.Name に割り当てます。
  • TextClass のこの新しいインスタンスをリスト TextClassList に追加します。

ツリービューでノードをクリックすると:

  • リスト TextClassList をループし、現在選択されている TreeNode.Name に一致する TextClass.Name 文字列を見つけます。
  • 次に設定: Textbox.Text = TextClass.Text

Textbox_TextChanged がトリガーされた場合:

  • リストをループして、現在選択されている TreeNode TreeNode.Name に一致する TextClass.Name 文字列を見つけます。
  • 次に設定: TextClass.Text = Textbox.Text

これはすべて正常に機能しますが、どうやら... ずさんなようです。値を保存および取得するこの方法について、より良い/適切な方法があるかどうかを尋ねています。これが OOP の基礎である場合は、検索できるキーワードをいくつか教えていただければ幸いです。

ありがとう、ダグ

4

1 に答える 1

0

TreeNodeには、Tagこのノードに関連付けられているデータを格納するために使用できるプロパティがあります。TextClassしたがって、新しく作成されたノードごとにインスタンスを保存できます。このようにして、余分なリストを維持してTreeNodeと同期する必要はありません。

また、関連付けの表示名には依存しません。名前を変更できるようにしたい場合、または2つのノードに同じ名前を付けることが許可されている場合は、問題が発生します。

Tagもう1つの質問は、プロパティがない場合にこれをどのように行うかです。次に、ディクショナリを使用して、TreeNodeインスタンスをTextClassインスタンスにマップします。

したがって、これから一般的なルールを作成する場合は、次のようになります。

  • インスタンスを参照するために文字列ではなく、可能な限り実際の参照を使用するようにしてください。
  • 識別に表示名を使用しないでください
于 2012-05-05T10:28:09.377 に答える