我从数据库中获取对象(People)列表,并动态生成一个标签列表,其中包含组框中表单中每个People对象的名称。 当我点击一个标签时,我创建了一个新的表单,其中包含对象People的所有属性(我发送给子表单对象People)。在哪里保留People对象的id(来自数据库)或列表中的id? 现在,我在标签中保留了id。 TabIndex但不太好。
在这种情况下你做了什么?
经过一些回复后编辑: 感谢大家的回复。
(好的,我看到Actually WPF came to replace WinForms所以我最好继续使用WPF。)
我不需要在标签中保留完整对象,但只需要保留其ID(此对象可能具有内部,其他数据库对象关联)。为什么我需要在标签中保留完整对象?我不希望这样! 到目前为止,我在tabIndex中保留了ID(因为它是一个int),我认为它更好,因为它不使用装箱和拆箱。
这个问题使问题的一部分更加普遍 如何在表单之间发送数据? 您是否允许子表单访问存储库? (我猜,在表单之间发送存储库并不好。) 但是,如果我需要更改子格式的数据(人形式=仅打印一个人的数据),那么我需要发送一个“保存更改”。 semnal(通过一个事件)到我的主要形式。所以这就像两种形式之间的双向关联。这样的好吗?
你有一本关于winforms的书(表格之间的数据)还是c#WinFroms中的一个真实应用程序?
答案 0 :(得分:1)
WinForms中是否还有Tag
属性?这对于存储此类信息非常方便。
答案 1 :(得分:1)
您可以在Label.Tag
中存储Id或People对象
然后,要检索它,您可以使用
var person = Label.Tag as People
答案 2 :(得分:1)
通常开发人员依赖控件的Tag属性,但我发现这是一个非常脆弱的解决方案,因为您可能希望将来使用该属性。 一个可能的简单解决方案是在Hashtable / Dictionary中为您的标签命名并存储{ControlName,ID}对。 另一个我认为更好的解决方案是在Hashtable / Dictionary中存储{Control Reference,ID}对。这样可以简化操作,因为您不必为标签生成名称。
以下是示例代码。
var peopleDictionary = new Dictionary<Label, int>();
foreach ( var person in people )
{
var control = new Label();
peopleDictionary.Add(person, person.ID);
groupBox.Controls.Add(control);
}