我正在制作一个 Windows 窗体应用程序。我有一个表格。我想在运行时通过单击按钮从原始表单打开一个新表单。然后以编程方式关闭这个新表单(2,3 秒后),但从 gui 主线程以外的线程关闭。
- 有人可以指导我怎么做吗?
- 新形式是否会影响或阻碍原主形式中发生的事情?(如果是,那么如何阻止它?)
要使用按钮单击打开,请在按钮事件处理程序中添加以下代码
var m = new Form1();
m.Show();
这里 Form1 是您要打开的表单的名称。
另外要关闭当前表单,您可以使用
this.close();
我会这样做:
var form2 = new Form2();
form2.Show();
并关闭我会使用的当前表格
this.Hide();
代替
this.close();
查看此Youtube 频道链接以获取简单的启动教程,如果您是初学者,您可能会发现它很有帮助
这是一个老问题,但回答是为了收集知识。我们有一个带有按钮的原始表单来显示新表单。
按钮单击的代码如下
private void button1_Click(object sender, EventArgs e)
{
New_Form new_Form = new New_Form();
new_Form.Show();
}
现在单击时,会显示新表单。因为,您想在 2 秒后隐藏我们正在向新表单设计器添加一个 onload 事件
this.Load += new System.EventHandler(this.OnPageLoad);
此OnPageLoad函数在加载该表单时运行
在NewForm.cs中,
public partial class New_Form : Form
{
private Timer formClosingTimer;
private void OnPageLoad(object sender, EventArgs e)
{
formClosingTimer = new Timer(); // Creating a new timer
formClosingTimer.Tick += new EventHandler(CloseForm); // Defining tick event to invoke after a time period
formClosingTimer.Interval = 2000; // Time Interval in miliseconds
formClosingTimer.Start(); // Starting a timer
}
private void CloseForm(object sender, EventArgs e)
{
formClosingTimer.Stop(); // Stoping timer. If we dont stop, function will be triggered in regular intervals
this.Close(); // Closing the current form
}
}
在这个新表单中,计时器用于调用关闭该表单的方法。
这是2秒后自动关闭的新表单,我们将能够对这两个表单进行操作,这两个表单之间没有干扰。
为了你的知识,
form.close()
将释放内存,我们再也无法与该表单交互
form.hide()
将只是隐藏表单,代码部分仍然可以运行
有关计时器的更多详细信息,请参阅此链接,https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=netframework-4.7.2
您只需要使用 Dispatcher 从 UI 线程以外的线程执行图形操作。我认为这不会影响主窗体的行为。这可能会对您有所帮助: 从 BackgroundWorker 线程访问 UI 控件
这也可能有帮助:
void ButtQuitClick(object sender, EventArgs e)
{
QuitWin form = new QuitWin();
form.Show();
}
将ButtQuit更改为您的按钮名称,并将QuitWin更改为您创建的表单的名称。
单击按钮时,它将打开另一个窗口,您需要在主窗体上创建另一个窗体和一个按钮才能使其工作。
private void btnchangerate_Click(object sender, EventArgs e)
{
this.Hide(); //current form will hide
Form1 fm = new Form1(); //another form will open
fm.Show();
}
点击 btn 当前表单将隐藏并打开新表单