C# 将数据从Windows窗体获取到C程序中
我想让我的C程序收集数据。然后,当单击OK按钮时,我希望将这些数据加载到我的程序中——例如加载到Main中的变量中,或者加载到我构建的类的数据成员中,然后我希望表单消失——不是隐藏,而是实际关闭。唉,正如我在书中读到的那样,表单收集的数据保留在表单中,执行在表单中进行,相同的表单用于显示程序计算的结果。嘘。我只想捕获表单的信息,关闭表单并继续我的程序。如果能提供一些将表单中的数据转换成Main或类的数据成员的技巧,我将不胜感激 谢谢,C# 将数据从Windows窗体获取到C程序中,c#,windows,forms,C#,Windows,Forms,我想让我的C程序收集数据。然后,当单击OK按钮时,我希望将这些数据加载到我的程序中——例如加载到Main中的变量中,或者加载到我构建的类的数据成员中,然后我希望表单消失——不是隐藏,而是实际关闭。唉,正如我在书中读到的那样,表单收集的数据保留在表单中,执行在表单中进行,相同的表单用于显示程序计算的结果。嘘。我只想捕获表单的信息,关闭表单并继续我的程序。如果能提供一些将表单中的数据转换成Main或类的数据成员的技巧,我将不胜感激 谢谢, 幸运的是,你在用WinForms写作?据我所知,一个Wind
幸运的是,你在用WinForms写作?据我所知,一个Windows应用程序必须有一个窗口,即使它是逐像素的 您是否见过其他Windows应用程序按照您希望的方式工作?打开一个窗口,窗口关闭,但程序继续运行?这通常被认为是不受欢迎的行为,类似于病毒和特洛伊木马 当然,您可以在没有GUI的情况下创建控制台应用程序或Windows服务
输入数据后,应用程序在后台做什么?如果只是做一些计算并保存到磁盘、上传或打印,请将窗口保持打开状态,然后在完成后退出。可能包括一个进度条。您是用WinForms编写的?据我所知,一个Windows应用程序必须有一个窗口,即使它是逐像素的 您是否见过其他Windows应用程序按照您希望的方式工作?打开一个窗口,窗口关闭,但程序继续运行?这通常被认为是不受欢迎的行为,类似于病毒和特洛伊木马 当然,您可以在没有GUI的情况下创建控制台应用程序或Windows服务
输入数据后,应用程序在后台做什么?如果只是做一些计算并保存到磁盘、上传或打印,请将窗口保持打开状态,然后在完成后退出。可能包括一个进度条。您想要做的是完全可以接受的,只是不典型 当您使用Visual Studio生成WinForms项目时,它会为您和用户创建一个表单 生成对Application.Runnew Form1的调用。对于这个版本的Run方法,当传递给运行的主窗体(在本例中是Form1)关闭时,应用程序将退出 Application.Run有三个重载版本。出于您的目的,您需要使用不同的重载:
Application.Run(ApplicationContext)
当您使用这个Run重载时,您可以控制应用程序何时退出。简而言之,有一种方法可以做到:
创建一个继承
应用程序上下文。
在其构造中:
创建您的表单。
订阅其关闭和关闭事件。
出示你的表格。
在FormClosing事件处理程序中,
从表单中获取数据。
在FormClosed事件处理程序中,执行以下操作:
不管你想用这个做什么
然后退出线程或执行其他操作。
这里是一个粗略的示例,但我将省略表单本身的代码。假设表单只有一个文本框,其Modifiers属性设置为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类的文档
要从表单中获取数据,有很多方法。简单的方法就是给表单一些公共属性。一种更复杂的方法是创建一个数据类并在表单上使用数据绑定控件。您想要做的是完全可以接受的,只是不典型 当您使用Visual Studio生成WinForms项目时,它会为您和用户创建一个表单 生成对Application.Runnew Form1的调用。对于这个版本的Run方法,当传递给运行的主窗体(在本例中是Form1)关闭时,应用程序将退出 Application.Run有三个重载版本。出于您的目的,您需要使用不同的重载:
Application.Run(ApplicationContext)
当您使用这个Run重载时,您可以控制应用程序何时退出。简而言之,有一种方法可以做到:
创建一个继承
应用程序上下文。
在其构造中:
创建您的表单。
订阅其关闭和关闭事件。
出示你的表格。
在FormClosing事件处理程序中,
从表单中获取数据。
在FormClosed事件处理程序中,执行以下操作:
不管你想用这个做什么
然后退出线程或执行其他操作。
这是一个粗略的例子,但我认为
我将省略表单本身的代码。假设表单只有一个文本框,其Modifiers属性设置为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类的文档
要从表单中获取数据,有很多方法。简单的方法就是给表单一些公共属性。更复杂的方法是创建一个数据类,并在表单上使用数据绑定控件。谢谢您的回复。假设我创建了一个类,其中包含数据成员的名字、姓氏、街道地址、城市和州。我希望我的表单收集这些信息,我的类的数据成员接收这些信息以供其他用途。我正在使用常规C生成一个Windows窗体来收集信息。@Jimmy:您可以使用数据绑定查看或在button OnClick事件中设置属性。实例变量可以是表单类的字段,也可以在OnClick事件中动态创建。这是一个复杂的问题;我建议大家多学习,熟悉事件驱动编程。我非常感谢JohnSaunders、Oded、Charles M和TrueWill花时间回答我这个愚蠢的新手问题。我是一个老的VBA程序员,正在努力学习C。II似乎面临着一个选择,要么让我显示的第一个表单继续运行,直到程序结束,要么认真学习数据绑定。这对我来说是一个令人畏惧但重要的选择。我希望在这方面有任何进一步的评论。我试图创建一个OpenID帐户,以便对回复进行评级,但我遇到了问题。我道歉。我会继续努力。@Jimmy:数据绑定不会让你摆脱这个困境。你总是需要一些东西来运作这个节目。在WinForms中,这通常是一个表单。谢谢您的回复。假设我创建了一个类,其中包含数据成员的名字、姓氏、街道地址、城市和州。我希望我的表单收集这些信息,我的类的数据成员接收这些信息以供其他用途。我正在使用常规C生成一个Windows窗体来收集信息。@Jimmy:您可以使用数据绑定查看或在button OnClick事件中设置属性。实例变量可以是表单类的字段,也可以在OnClick事件中动态创建。这是一个复杂的问题;我建议大家多学习,熟悉事件驱动编程。我非常感谢JohnSaunders、Oded、Charles M和TrueWill花时间回答我这个愚蠢的新手问题。我是一个老的VBA程序员,正在努力学习C。II似乎面临着一个选择,要么让我显示的第一个表单继续运行,直到程序结束,要么认真学习数据绑定。这对我来说是一个令人畏惧但重要的选择。我希望在这方面有任何进一步的评论。我试图创建一个OpenID帐户,以便对回复进行评级,但我遇到了问题。我道歉。我会继续努力。@Jimmy:数据绑定不会让你摆脱这个困境。你总是需要一些东西来运作这个节目。在WinForms中,这通常是一种形式。