gpt4 book ai didi

c# - 从 Windows 窗体获取数据到 C# 程序

转载 作者:可可西里 更新时间:2023-11-01 11:22:33 28 4
gpt4 key购买 nike

我想让我的 C# 程序收集数据。然后,当单击“确定”按钮时,我希望将此数据加载到我的程序中——例如加载到 Main() 中的变量中,或者加载到我构造的类的数据成员中,然后我希望表单消失——不是隐藏,而是实际关闭。 las,正如我在我的书中所读的那样,表单收集的数据保留在表单中,执行在表单内进行,并且使用相同的表单来显示程序的计算结果。嘘。我只想捕获表单的信息,关闭表单并继续我的程序。如果能提供一些有关将数据从表单导入 Main() 或类的数据成员的提示,我将不胜感激。

谢谢,幸运

最佳答案

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

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

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

Application.Run(ApplicationContext)

当您使用 Run() 的这种重载时,您可以控制应用程序何时退出。简而言之,您可以采用以下一种方式:

  • 创建一个继承的类ApplicationContext。
  • 在其构造函数中:
    • 创建您的表单。
    • 订阅其 Closing 和 Closed 事件。
    • 展示你的表格。
  • 在您的 FormClosing 事件处理程序中,从表单中获取数据。
  • 在您的 FormClosed 事件处理程序中,执行无论你想做什么数据,然后退出线程(或执行其他操作)。

这是一个粗略的示例,但我将省略表单本身的代码。假设表单只有一个 TextBox,其 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 类的文档。

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

关于c# - 从 Windows 窗体获取数据到 C# 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443077/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com