【问题标题】:Editing a single referenced variable in child forms in c#在 C# 中编辑子窗体中的单个引用变量
【发布时间】:2012-09-10 06:58:29
【问题描述】:

我目前正在尝试为我正在进行的项目制作程序。

我使用了 2 个最终嵌入到父 WinForm 中的用户窗体。

我需要做的是创建一个对我的设置类的引用,并让用户表单直接编辑该变量,但似乎没有用。数据使用序列化的 XML 存储

我有一个类可以控制我的 xml 文件的读/写。它首先在 ParentForm 中创建。然后,我有几个动态控件,它们从单独的用户表单中的 List 变量中读取。然后我使用该数据创建另一个用户窗体,它允许我查看/编辑这些变量。

我目前可以很好地查看它们,但我无法编辑变量。我对使用引用不是很熟悉,因为大多数时候我要么使用事件,要么只是将数据从一个表单复制到另一个表单,从而导致(我觉得)不必要的开销。

为了更好的说明

WinForm -> 选择类别 -> 绘制 UserForm1(显示类别中的项目)-> 选择项目 -> 绘制 UserForm2(编辑项目)

所有表单都需要访问 WinForm 中的 Settings 变量。

这是我目前正在做的:

编辑表格:

public partial class EditPage: UserControl
{
    public StorageClass refSettings;
    public EditPage(ref StorageClass pSettings)
    {
                  refSettings = pSettings;

分类表格:

public partial class Categories: UserControl
{
    public StorageClass programSettings;
    public Categories(ref StorageClass pSettings)
    {
                  programSettings = pSettings;

这当然不是实际的代码,而是我想要做的主要事情。 任何帮助都会很棒

编辑:我没有收到任何错误。被传递的变量根本没有被更新。当我去编辑它时,它只是在处理子编辑表单后恢复。

【问题讨论】:

  • 您遇到的错误是什么?

标签: c# winforms


【解决方案1】:

你可以有一个通用的设置类,它从 XML 中读取配置,我相信你已经拥有了。
假设您有一个下拉选择,指示要在其中加载和显示哪个用户控件
MainForm 中的一个面板,因此您可以从 SelectionChangedEvent 调用用户控件并传递
设置类到 UserControls 的构造函数。
您还可以在 UserControls 中公开事件并从 MainForm 订阅这些事件 根据用户控件中的操作在 MainForm 中进行任何更改。
假设您想编辑一些东西,从用户控件触发一个事件并在 MainParent Form 中订阅该事件,然后从 MainForm 进行更改。

【讨论】:

  • 只使用事件并以这种方式处理变量似乎是我的最佳选择。似乎您可以参考子表单,但由于某种原因无法保留更改。如果有人确实弄清楚了,我仍然会密切关注这一点。
  • @Vouksh 还可以查看 INotifyPropertyChanged 接口,您可以让您的设置类实现这一点,并且无论您在哪里使用设置,您都可以监听 PropertyChanged 事件并相应地执行操作。
【解决方案2】:

首先:考虑到StorageClass 类型的name 我认为它是一个引用类型。因此,在 这种情况 中,您不需要像使用 ref 关键字的引用一样传递它。

第二:如果这只是一个data-class,包含一些必须在程序的不同域之间共享的数据的类,在单独的类中声明它,例如static一个。

一个伪代码

public static clss StorageClass 
{
     public StorageData Data1
     public StorageData Data2
     public StorageData Data3

}

一次正确初始化该类中的所有字段,您可以在应用程序的任何形式中使用它,例如简单访问StorageClass.Data1

【讨论】:

  • 唯一的问题是,我需要在整个程序过程中将编辑的数据保留为最终形式,因为编辑其他项目,更改类别等。如果我只是使用类的值,岂不是简单地对表单中的变量做一个独立的副本?
  • @Vouksh: 表单中编辑的数据是否必须与他人共享?如果是,这个解决方案有什么问题。每个人都使用相同的变量,如果有人更改它,所有人都可以立即访问这些更改。
  • 类是引用类型,所以它不会是数据的独立副本。
  • @VigneshNatraj:根据帖子,他需要 same 变量而不是副本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多