【问题标题】:Resetting Modal Form When Closing C# Windows Forms App关闭 C# Windows 窗体应用程序时重置模式窗体
【发布时间】:2020-02-19 19:57:30
【问题描述】:

我正在编写一个与数据库交互的 C# Windows Forms App Online Store GUI。我必须做的一件事是处理已经在数据库中的客户。他们从主菜单表单中单击“回头客”按钮,然后输入他们的电子邮件和密码。然后将输入的数据与存储在数据库中的客户进行核对,如果经过验证,他们的用户信息将被填充到文本框(姓名、信用卡信息、CVS 等)中,并且订单表格变得可见。我在那里没有问题。我遇到的问题是,如果回头客成功登录,然后取消回到主菜单,下一个单击“回头客”按钮的人会拉出表单,其中第一个用户的信息已经填写并可见,因为this.Close()this.DialogResult = DialogResult.Cancel 方法都只是隐藏 表单而不是实际关闭和释放它。但是如果我在返回客户表单上使用this.Dispose() 来释放它,它就无法重新打开。
我的问题是:有没有简单的方法来处理这个问题?我是用 C# 自学的,所以请原谅我的经验不足。感谢您提供的任何帮助。

根据请求,请参阅下面的 Form1(主菜单表单)代码:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Database_Interface_Project
{
    public partial class Form1 : Form
    {
        // Removed SqlConnectionString for security purposes.
        public SqlConnection cnn = new SqlConnection(connectionString);


        // Main Menu Form
        public Form1()
        {
            InitializeComponent();
        }

        // New Customer Form
        Form2 newCustomer = new Form2();

        private void newCusButt_Click(object sender, EventArgs e)
        {
            newCustomer.ShowDialog();
        }

        // Returning Customer Form
        ReturningCustomer returningCustomer = new ReturningCustomer();
        private void RetCusButt_Click(object sender, EventArgs e)
        {
            returningCustomer.ShowDialog();

        }

        private void exitButt_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        // Manager Menu Form
        Manager managerMenu = new Manager();
        private void managerButt_Click(object sender, EventArgs e)
        {
            managerMenu.ShowDialog();
        }
    }
}```

【问题讨论】:

  • 你能分享打开这个表格的代码吗?
  • 我对其进行了编辑以包含所有 Form1(主菜单表单)代码。
  • 为什么是“...Butt_Click”而不是“...Button_Click”?
  • 只是我的控件命名约定。按钮是 Butt,标签是 Lab,文本框是 Box 等。

标签: c# winforms


【解决方案1】:

您只需重新实例化returningCustomer 表单即可重置其字段。

private void RetCusButt_Click(object sender, EventArgs e)
{
    using (var returningCustomer = new ReturningCustomer())
    {
        returningCustomer.ShowDialog();
    }
}

using 语句在 using 块离开后自动调用 Dispose()

注意:在您的情况下,您需要适当地处理 ShowDialog 以避免 GDI 泄漏,因为它具有使 GDI 对象保持活动状态的副作用。

【讨论】:

  • 对不起,这是一个愚蠢的问题,但是如何正确处理 ShowDialog?像ShowDialog.Dispose()这么简单吗?
  • @LeGuepard using 块实际上是 try/finally 块。 finally 部分调用[object].Dispose()。因此,要处理模态表单,您只需使用 using 语句声明它:它将在退出时自动处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
相关资源
最近更新 更多