我希望我的C#程序收集数据。然后,当单击OK按钮时,我希望这些数据加载到我的程序中--比如加载到Main()中的变量中,或者加载到我构造的类的数据成员中,然后我希望表单消失--不是隐藏,而是实际关闭。遗憾的是,就像我在我的书中读到的那样,表单收集的数据留在表单中,执行在表单中进行,相同的表单用于显示程序的计算结果。天哪。我想要的就是捕获表单的信息,关闭表单并继续我的程序。对于如何将数据从表单获取到Main()或类的数据成员中,我非常感谢一些技巧。
谢谢你,Lucky
发布于 2010-03-15 01:54:02
你在用WinForms写东西?据我所知,Windows应用程序必须有一个窗口,即使它是一个像素又一个像素。
您是否见过其他Windows应用程序,它们的工作方式与您希望的一样?打开一个窗口,窗口关闭,但程序继续运行?这通常被认为是不受欢迎的行为,类似于病毒和特洛伊木马。
当然,您可以在没有GUI的情况下创建控制台应用程序或Windows服务。
输入数据后,应用程序在幕后做什么?如果它只是在做一些计算并保存到磁盘、上传或打印,请保持窗口打开,然后在完成时退出。可能包括一个进度条。
发布于 2010-03-15 04:27:47
你想要做的事情是完全可以接受的,只是它不是典型的。
当您使用Visual Studio生成新项目时,它会为您创建一个窗体并生成对Application.Run( WinForms Form1())的调用。对于这个版本的Run()方法,您的应用程序将在"main form“(传递给Run()的表单,在本例中为Form1)关闭时退出。
Application.Run()有三个重载(版本)。出于您的目的,您需要使用不同的重载:
Application.Run(ApplicationContext)当您使用Run()的这个重载时,您可以控制应用程序何时退出。简而言之,这里有一种你可以做到的方法:
创建一个继承ApplicationContext.
的
这是一个粗略的示例,但我将省略表单本身的代码。假设表单只有一个TextBox,它的修饰符属性设置为Public。(这不是从表单中获取数据的优雅方法,但这部分取决于您)。
namespace Me.MyDemo
{
static class Program
{
[STAThread]
static void Main()
{
MyApplicationContext ac = new MyApplicationContext();
Application.Run(ac);
}
class MyApplicationContext : ApplicationContext
{
string _text = "";
public MyApplicationContext()
{
Form1 f1 = new Form1();
f1.FormClosing += new FormClosingEventHandler(f1_FormClosing);
f1.FormClosed += new FormClosedEventHandler(f1_FormClosed);
Console.WriteLine("I am here. Showing form in 1 second...");
Thread.Sleep(1000);
f1.Show();
}
void f1_FormClosing(object sender, FormClosingEventArgs e)
{
_text = (sender as Form1).textBox1.Text;
}
void f1_FormClosed(object sender, FormClosedEventArgs e)
{
Console.WriteLine("You wrote: " + _text);
Console.WriteLine("I will go away in 2 seconds...");
Thread.Sleep(2000);
ExitThread();
}
}
}
}当然,您不必退出线程。如果你的程序还有其他事情要做,你可以让它继续运行。它将作为一个无窗口的进程运行。只需记住,你有责任最终结束它。
有关更多帮助,请查看System.Windows.Forms.Application类和ApplicationContext类的文档。
要从表单中获取数据,有许多方法可以实现这一点。简单的方法是只给你的表单一些公共属性。一种更复杂的方法是创建一个数据类并在窗体上使用数据绑定控件。
https://stackoverflow.com/questions/2443077
复制相似问题