0

データベースからオブジェクト (People) のリストを取得し、グループ ボックスのフォームに各 People オブジェクトの名前を含むラベルのリストを動的に生成します。ラベルをクリックすると、オブジェクト People のすべてのプロパティを含む新しいフォームが作成されます (子フォームにオブジェクト People を送信します)。People オブジェクトの ID (データベースから) またはリストからの ID を保持する場所は? これで、id をラベルに保持します。TabIndex ですが、あまりよくありません。

この状況であなたは何をしますか?

いくつかの応答後に編集:応答してくれてありがとう。

(わかりました、実際に WPF が WinForms を置き換えるようになったので、WPF に移行した方がよいでしょう。)

ラベルに完全なオブジェクトを保持する必要はありませんが、彼の ID のみを保持する必要があります (このオブジェクトには、内部の、他のデータベース オブジェクトの関連付けがある可能性があります) ラベルに完全なオブジェクトを保持する必要があるのはなぜですか? !
これまで、私はIDをtabIndexに保持しています(intであるため)。ボックス化とボックス化解除を使用しないため、この方法の方が優れていることがわかります。

この問題は、質問の一部をより一般的にします。
フォーム間でデータを送信する方法 子フォームがリポジトリにアクセスできるようにしますか? (フォーム間でリポジトリを送信するのは良くないと思います。)しかし、子フォームのデータを変更する必要がある場合(個人フォーム= 1人だけのデータを印刷する)、「変更の保存」セムナルを送信する必要があります(イベントを通じて)私の主要なフォームに.つまり、これは2つのフォーム間の双方向の関連付けのようなものです.これでいいですか?

winforms (フォーム間のデータ) の本、または c# WinFroms の実際のアプリケーションを 1 つ持っていますか?

4

3 に答える 3

1

TagWinFormsにはまだプロパティがありませんか? これは、そのような情報を隠しておくのに便利です。

于 2013-03-25T21:04:11.677 に答える
1

Id または People オブジェクトを に保存できますLabel.Tag
次に、それを取得するには、次を使用できます

var person = Label.Tag as People
于 2013-03-25T21:04:36.860 に答える
1

通常、開発者はコントロールの Tag プロパティに依存していますが、これは非常に脆弱なソリューションだと思います。将来、そのプロパティを別の目的で使用する可能性があるからです。考えられる簡単な解決策は、ラベルに名前を付けて、{ ControlName, ID } のペアを Hashtable / Dictionary に格納することです。さらに良いと思う別の解決策は、{ Control Reference, ID } のペアを Hashtable / Dictionary に格納することです。これにより、ラベルの名前を生成する必要がないため、作業が簡単になります。

以下はサンプルコードです。

var peopleDictionary = new Dictionary<Label, int>();

foreach ( var person in people )
{
    var control = new Label();

    peopleDictionary.Add(person, person.ID);

    groupBox.Controls.Add(control);
}
于 2013-03-25T21:05:46.250 に答える