c# - 将完整的子表单传递给另一个子表单

标签 c# winforms visual-studio-2010 .net-2.0

我看到很多页面和问题都涉及将值从一种形式传递到另一种形式。我想做一些不同的事情。不是值,而是整个表单,作为参数传递。请注意,这不是 MDI 表格。

我有一个带有 2 个按钮的父表单。一个按钮创建一个 Child1 表单等等。另一个(可选)按钮调用不同的子表单编辑器。

第一个按钮是一个验证按钮,如果有效,它会弹出 Child1 表单,其中包含一个包含键/值对的 ListView 框。 第二个是带有自己按钮的编辑器。如果其中一个(提交)按钮被按下,那么第一个 Child1 表单应该更新为一个新的键值对。

我一直遇到的问题是我似乎无法让 Child1 表单反射(reflect)更改。我不知道更新此 Child1 表单的最佳方法是什么。我已经尝试使用 EndUpdate 和 BeginUpdate,并刷新它,现在经过所有尝试,我有点迷路了。我希望有人能帮助我。

我真正想做的是刷新 ChildForm1,假设它是一个收件箱,当从第二个子窗体编辑器“保存”或添加某些内容时。在第二个子窗体编辑器中单击按钮,第一个子窗体应该刷新。

父表单:

    public ChildForm1 MyboxofValues; 

    private void btn1_Click(object sender, EventArgs e)
    {
            MyboxofValues = new ChildForm1();
            MyboxofValues.Show();
    }

    private void btn2_Click(object sender, EventArgs e)
    {
        Editor myEditor = new Editor();
        myEditor.Show(); 
    }

子窗体 1:

    public ChildForm1()
    {
        InitializeComponent();
        updateMe();

    }
    public void updateMe()
    {
        listView1.Items.Clear();
        if (MainCode.subRows.Count > 0)
        {
            foreach (KeyValuePair<string, string> element in MainCode.subRows)
            {
                ListViewItem lvi = new ListViewItem(element.Value);
                lvi.SubItems.Add(element.Key);
                listView1.Items.Add(lvi);
            }
        }
    }

编辑器表单:

    private ChildForm1 originalForm = new ChildForm1();

    private void btnSubmit_Click(object sender, EventArgs e)
    {
            originalForm.updateMe();
    }

我确定这很容易,但我做不到。如果有人可以提供帮助,将不胜感激,节省我的时间!如果有更好的方法来更新提交结果也可以,请举例说明?

出于测试目的,我为 ChildForm1 创建了一个“刷新”按钮,它起作用了! (它实际上只是调用了 updateMe()。所以我认为我正在创建一个新的表单实例并尝试更改这个不存在的(空)表单而不是实际的 ChildForm1。但我想刷新 listviewBox来自编辑器表单。

最佳答案

与其让 Editor 成为父表单的“子”表单,不如让它成为 ChildForm 的子表单(也就是父表单的孙子表单)。当然,由于您没有使用 MDI,这只是解决问题的一种合乎逻辑的方法,仅此而已。

与其让父级创建 Editor,不如让 ChildForm 创建它。单击父窗体的第二个按钮时,它会调用 ChildFormCreateEditor 之类的方法。当它创建编辑器时,它显然可以存储它以供以后交互。

如果父表单需要使用 Editor 做任何其他事情,它可以通过 ChildForm 来完成。

关于c# - 将完整的子表单传递给另一个子表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14159637/

相关文章:

c# - 在 C# 中可以只写 WriteLine 而不是 Console.WriteLine 吗?

c# - y 轴从 10 开始,而不是使用 Windows 应用程序的 mschart 中的 0

vb.net - 在VB中将字符串或base10转换为base 2

visual-studio - Visual Studio和Visual Studio Express有什么区别?

c# - TreeNodeCollection引用问题

c# - 无法使用 CommandLineParser 包运行程序

c# - 使用暴露的 API 在 MVVM 应用程序中进行大量包装

c# - FolderBrowserDialog 的替代品

c++ - 字符串文字的隐式转换

visual-studio-2010 - 扩展 list 无效,CompositeC1WebFormExtensions.vsix