【问题标题】:InvalidOperationException when I attempt running another Form当我尝试运行另一个表单时出现 InvalidOperationException
【发布时间】:2016-04-08 13:33:00
【问题描述】:
    private void preferencesToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Application.Run(new Preferences());
    }
    private void button10_Click(object sender, EventArgs e)
    {
        Application.Run(new Configuration());
    }
    private void button6_Click(object sender, EventArgs e)
    {
        Application.Run(new Configuration());
    }

这是我使用的代码。当我打开程序时,它会在发生指定事件之一后引发异常。调试器提供了附加信息:“在单个线程上启动第二个消息循环不是有效的操作。请改用 Form.ShowDialog。”这是我认为很正常的事情。使用 ShowDialog()(见下面的代码)实际上并不能解决问题。

    private void preferencesToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Preferences.ShowDialog();
    }
    private void button10_Click(object sender, EventArgs e)
    {
        Configuration.ShowDialog();
    }
    private void button6_Click(object sender, EventArgs e)
    {
        Configuration.ShowDialog();
    }

相反,出现错误“非静态字段、方法或属性'Form1.ShowDialog()'需要对象引用。是的,它发生是因为VS2015认为我想显示一个属于的对话框到表单,而我的反对是打开另一个表单。它还会建议简化成员访问...

这是 Program.cs 中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace y_cruncher_GUI_edition
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [MTAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

编辑:我在项目中有三个表单(Form1、Configuration 和 Preferences)。程序打开 Form1,当按下特定按钮时,我想显示配置或首选项。

我希望我没有像上次问问题那样做任何愚蠢的事情(在这方面仍然是新手)。感谢任何评论、帮助或投票。 :)

【问题讨论】:

  • 请使用正确的标题。不要强迫人们阅读整个问题以了解您的要求
  • 顺便说一句,错误很明显——你已经运行你的应用程序,调用Application.Run的目的是什么?你想做什么?
  • 首先,感谢您快速回答。其次,我想打开另一个表格。第三,很抱歉造成您的不便,但我忘了完成标题...
  • 另外,VS 不会认为您正在尝试显示一个对话框,它知道您正在尝试将非静态方法调用为它是一个静态的。 ShowDialog 适用于实例,而您在 本身上调用它,即作为静态方法。
  • 如果您想打开一个表单,请按照any教程中的说明进行操作。使用var someForm=new WhatsMyForm(); 创建一个新的表单实例,然后在其上调用Show();ShowDialog(),即someForm.Show();

标签: c# winforms


【解决方案1】:

如果您只想显示另一个表单,只需将以下代码放入按钮的 onClick() 事件中即可。

Preferences p1 = new Preferences(); p1.show();

【讨论】:

  • 感谢您的回答。我试过了,它成功了!我有点修改它,但它工作正常! :)
  • 你需要m8没问题。
猜你喜欢
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2020-02-11
  • 1970-01-01
相关资源
最近更新 更多