1

当我尝试调用form1from上的方法时form2,根据以下代码,没有任何反应:

表格2:

Form1 form1 = new Form1();
form1.AddToListView();

表格1:

public void AddToListView()
{
    AddList();
    listView1.Items.Add("Test", "Test", 0);
    label1.Text = "Test";
}

我究竟做错了什么?

4

2 回答 2

5

随着Form1 form1 = new Form1();您正在创建表单的新实例,而不是引用您的 mainform1我假设是您的问题。

您要么需要传递form1toform2的构造函数的引用,要么丢弃当前form1并更改form2为:

Form1 form1 = new Form1();
form1.Show();
form1.AddToListView();
于 2013-09-08T17:18:15.063 回答
-1

正如 Alfie 所说,当您创建 Form1 的新实例时,它与当前正在运行的实例无关,您可能会在解决方案的文件中找到创建和运行的Main方法:Program.cs

static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1()); // THIS INSTANCE
        }

如果您难以理解这一点,那么您最好更加熟悉面向对象编程 (OOP)。在过去的编程语言(如 VB6)中,我们只有一个 Form1。但是在像 C# 这样的 OOP 中,您可能有数千个 Form1 实例,更通俗地说,有数千个 Form1。

但是,您想要做的最好的解决方案可能是更改运行 Form1 的默认方式:

static class Program
    {
        public static Form1 myForm1;

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            myForm1= new Form1 ();
            Application.Run(myForm1);
        }

    }

并使用它来操作实例:

Program.myForm1.AddToListView();

顺便说一句,就 OOP 而言,这样做对我来说似乎很不自然。请添加有关您对此可能有的任何想法的评论?

于 2013-09-08T18:59:32.827 回答