0

我从数据库中获取对象(人员)列表,并在组框上的表单中动态生成带有每个人员对象名称的标签列表。当我单击一个标签时,我创建了一个具有对象 People 的所有属性的新表单(我向子表单发送一个对象 People)。在哪里保留 People 对象的 id(来自数据库)或列表中的 id?现在,我将 id 保留在标签中。TabIndex 但不太好。

在这种情况下你会怎么做?

部分回复后编辑:感谢大家的回复。

(好吧,我看到实际上 WPF 来取代 WinForms,所以我最好继续使用 WPF。)

我不需要在标签中保留完整对象,而只需要他的 ID(此对象可能具有内部、其他数据库对象关联)。为什么我需要在标签中保留完整对象?我不希望这样!
到目前为止,我将 ID 保留在 tabIndex 中(因为它是一个 int),我认为这种方式更好,因为它不使用装箱和拆箱。

这个问题使问题的一部分更普遍。
如何在表单之间发送数据? 您是否允许子表单访问存储库?(我认为在表单之间发送存储库并不好。)但是如果我需要更改子表单中的数据(人表单=它仅为一个人打印数据),那么我需要发送一个“保存更改”semnal (通过一个事件)到我的主要形式。所以这就像两种形式之间的双向关联。这样好吗?

你有一本关于 winforms 的书(表单之间的数据)或 c# WinFroms 中的一个真实应用程序吗?

4

3 回答 3

1

您可以将 Id 或 People 对象存储在Label.Tag.
然后,要检索它,您可以使用

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

通常开发人员依赖于控件的 Tag 属性,尽管我发现这是一个非常脆弱的解决方案,因为您将来可能希望将该属性用于其他用途。一个可能的简单解决方案是命名您的标签并将 { ControlName, ID } 对存储在哈希表/字典中。另一种我认为更好的解决方案是将成对的 { 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 回答
1

TagWinForms中不是还有一个属性吗?这对于存储此类信息很方便。

于 2013-03-25T21:04:11.677 回答