Windows窗体 - 将对象传递给模式窗体以填充然后传回

时间:2012-07-20 21:32:11

标签: windows forms modal-dialog pass-by-reference

我有一个使用Dictionary作为其数据源的UltraGrid。我想将字典传递给另一个(模态)表单以进行操作,并将更改反映在父表单的字典中。

我能够将字典传递给子表单,放在它上面让我高兴,但没有任何更改反映在父表单的字典中。我相信这是因为子窗体上的字典参数没有引用同一个对象。

我真的不想通过ref传入字典。模态形式有一个私有构造函数和一个公共静态方法ShowForm()。我没有使用它的实例。有人可以请我扔骨头吗?

1 个答案:

答案 0 :(得分:0)

好的,我能够通过做两件事来实现这个目标:

1)确保在将字典传递给子表单之前初始化字典,而不是在子表单中初始化空字典。

2)当子表单关闭时,将字典分配回网格上的数据源。

以下是父表单的代码,显示了它的实际效果:

private void addColorCodeLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        var assignedColorCodes = 
            (Dictionary<string, string>)this.subtypeColorCodesUltraGrid.DataSource;

        //Initialize a null dictionary so that SubtypeColorCodeForm will reference the same dictionary.
        if (assignedColorCodes == null)
            assignedColorCodes = new Dictionary<string, string>();

        SubtypeColorCodeForm.ShowForm(this, new ImageServerProxy(this.tbImagingUri.Text), 
            assignedColorCodes);

        //Assign the updated dictionary back to the data source.
        this.subtypeColorCodesUltraGrid.DataSource = assignedColorCodes;
    }