【问题标题】:How to make form2 update when value changed in form1当form1中的值更改时如何使form2更新
【发布时间】:2020-11-17 11:37:15
【问题描述】:

在 C# 中,我有两种形式“Form1”和“Form2”。 Form1 创建存储在文件夹中的图像。 Form2 显示该文件夹中的图像数量。

假设我用 Form1 制作了 2 张图像,然后我打开 Form2。 Form2 现在说有 2 个图像。现在,在保持两个表单打开的同时,我希望能够添加新图像和 Form2 更新。目前,如果我在 Form2 打开时使用 Form1 添加更多图像,Form2 将继续显示 Form2 打开时文件夹中的图像数量。

我找到了涉及 Form2 关闭和重新打开的解决方案,但我不想要这个。对于每次按下按钮时打开和关闭窗口的用户来说,这是不和谐的。我只希望 Form2 在我使用 Form1 进行更改时实时更新。

任何帮助将不胜感激!!谢谢!

【问题讨论】:

  • 请参阅以下info 事件。

标签: c# forms visual-studio


【解决方案1】:

您可以使用 Form2 中的公共方法来做到这一点

在 Form1 中,您需要将 Form2 对象保存在属性中

表格 1

    public partial class Form1 : Form
    {
        public Form2 MyProperty { get; set; }
        public Form1()
        {
            InitializeComponent();
        }

        // for opening form 2
        private void button1_Click(object sender, EventArgs e)
        {
            
            Form2 f2 = new Form2();
            f2.Show();
            MyProperty = f2;
        }


        // adding new image
        private void button_ADD_Click(object sender, EventArgs e)
        {
            MyProperty.updateCounter();
        }
    }

当你添加新图像时,你可以从 Form2 调用方法来更新计数器。

在 FORM 2 中,您需要使用 crate PUBLIC 方法来更新计数器

 public partial class Form2 : Form
    {
    

        public Form2()
        {
            InitializeComponent();
            // default value
            label1.Text = "0";
        }

        // update counter
        public void updateCounter()
        {
            label1.Text = (int.Parse(label1.Text) + 1).ToString();
        }

    }

【讨论】:

    【解决方案2】:

    您可能想看看活动和代表。基本上,每当您对Form1 执行可能影响其他表单的操作时,您都希望触发一个事件。在Form2 中,您有一个方法,只要 event 触发,您就可以调用该方法。这样您就可以打开多个表单,只要您将它们设置为“listen”到给定的事件,它们都可以做出反应。

    你可以在这里阅读更多关于它们的信息,Microsoft Documentation。

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多