首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Windows Form中的数据导入C#程序

将Windows Form中的数据导入C#程序
EN

Stack Overflow用户
提问于 2010-03-15 01:46:29
回答 2查看 4.2K关注 0票数 1

我希望我的C#程序收集数据。然后,当单击OK按钮时,我希望这些数据加载到我的程序中--比如加载到Main()中的变量中,或者加载到我构造的类的数据成员中,然后我希望表单消失--不是隐藏,而是实际关闭。遗憾的是,就像我在我的书中读到的那样,表单收集的数据留在表单中,执行在表单中进行,相同的表单用于显示程序的计算结果。天哪。我想要的就是捕获表单的信息,关闭表单并继续我的程序。对于如何将数据从表单获取到Main()或类的数据成员中,我非常感谢一些技巧。

谢谢你,Lucky

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-15 01:54:02

你在用WinForms写东西?据我所知,Windows应用程序必须有一个窗口,即使它是一个像素又一个像素。

您是否见过其他Windows应用程序,它们的工作方式与您希望的一样?打开一个窗口,窗口关闭,但程序继续运行?这通常被认为是不受欢迎的行为,类似于病毒和特洛伊木马。

当然,您可以在没有GUI的情况下创建控制台应用程序或Windows服务。

输入数据后,应用程序在幕后做什么?如果它只是在做一些计算并保存到磁盘、上传或打印,请保持窗口打开,然后在完成时退出。可能包括一个进度条。

票数 0
EN

Stack Overflow用户

发布于 2010-03-15 04:27:47

你想要做的事情是完全可以接受的,只是它不是典型的。

当您使用Visual Studio生成新项目时,它会为您创建一个窗体并生成对Application.Run( WinForms Form1())的调用。对于这个版本的Run()方法,您的应用程序将在"main form“(传递给Run()的表单,在本例中为Form1)关闭时退出。

Application.Run()有三个重载(版本)。出于您的目的,您需要使用不同的重载:

代码语言:javascript
复制
Application.Run(ApplicationContext)

当您使用Run()的这个重载时,您可以控制应用程序何时退出。简而言之,这里有一种你可以做到的方法:

创建一个继承ApplicationContext.

  • In其构造函数的类:
  • 创建其关闭和关闭事件的form.
  • Subscribe。显示form.

  • 在FormClosing事件处理程序中,从表单中获取数据。
  • 在FormClosed事件处理程序中,对数据执行任意操作,然后退出线程(或执行其他操作)。

这是一个粗略的示例,但我将省略表单本身的代码。假设表单只有一个TextBox,它的修饰符属性设置为Public。(这不是从表单中获取数据的优雅方法,但这部分取决于您)。

代码语言:javascript
复制
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类的文档。

要从表单中获取数据,有许多方法可以实现这一点。简单的方法是只给你的表单一些公共属性。一种更复杂的方法是创建一个数据类并在窗体上使用数据绑定控件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2443077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档