【问题标题】:Send data between forms. (Label Id Data binding?)在表单之间发送数据。 (标签 ID 数据绑定?)
【发布时间】:2013-03-28 00:57:47
【问题描述】:

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

遇到这种情况你会怎么做?

在一些回复后编辑: 感谢大家的回复。

(好的,我看到了Actually WPF came to replace WinForms,所以我最好继续使用 WPF。)

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

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

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

【问题讨论】:

  • How did you do in this situation? - 我用 WPF 代替了 winforms,它有一个严谨的绑定框架,并允许 UI 和数据之间清晰而真实的分离。

标签: c# winforms visual-studio-2010


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    var person = Label.Tag as People
    

    【讨论】:

      【解决方案3】:

      通常开发人员依赖控件的 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);
      }
      

      【讨论】:

      • 您的解决方案有点矫枉过正。这正是 Tag 属性的用途。你为什么要把它保存在将来的其他东西上?
      • @icemanind 装箱和拆箱会更少overkil吗?将它用于其他用途的一个简单示例是当您需要该标签中的更多属性时。假设您想要 Tag 属性中的整个 Person 对象。你做什么工作?重写整个代码???
      • @Cristian - tag 属性接受一个对象。因此,如果您需要存储更多属性,您只需创建一个具有属性的帮助类...实例化该类的一个实例并将其分配给 Tag 属性。
      • @icemanind 和 Cristian 我不在乎所谓的“标签”属性是做什么用的。 UI 不是存储数据的正确位置。
      • @Cristian 问题是 winforms 的限制迫使开发人员进行这类黑客攻击(标签属性或其他)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      相关资源
      最近更新 更多