【发布时间】: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();