关闭表单然后在另一个表单中执行操作

Close a form then do a action in another forme

我有两个表格,MainFormConfig,当我的软件打开时,MainFormConfig 表格也打开了。

public mainForm()
{
    InitializeComponent();

    this.Show();

    connectionStatusToolStrip.Text = "**********";
    connectionStatusToolStrip.BackColor = Color.Red;
    statusConnection = false;

    tryConnect = true;

    Config config = new Config();
    config.ShowDialog();
}

出于焦点原因,我将 Config 表格显示为 Dialog

当我关闭 Config 表单时,我需要刷新或类似的东西, MainForm.

这是配置表单上“确定”按钮的代码。

private void ok_button(object sender, EventArgs e)
{
    mainForm.USER_FTP = UsuerConfigTextBox.Text.ToString();
    mainForm.PASSWORD_FTP = PasswordConfigTextBox.Text.ToString();
    mainForm.IP_CONNECTION = IpConfigTextBox.Text.ToString();

    this.Close();
}

翻转过来可能更好:

public mainForm()
{
    InitializeComponent();

    this.Show();

    connectionStatusToolStrip.Text = "**********";
    connectionStatusToolStrip.BackColor = Color.Red;
    statusConnection = false;

    tryConnect = true;

    Config config = new Config();
    var r = config.ShowDialog();
    if(r == DialogResult.OK){
        USER_FTP = config.UsuerConfigTextBox.Text;
        PASSWORD_FTP = config.PasswordConfigTextBox.Text;
        IP_CONNECTION = config.IpConfigTextBox.Text;

        //connect to server?
    }
}

您需要制作 user/pass/ip 文本框 public,或提供获取其值的属性:

partial class Config: Form{

  public string UserName => UsuerConfigTextBox.Text;
  ...

}


...


if(r == DialogResult.OK){
    USER_FTP = config.UserName;
    ...

    //connect to server?
}

这样您的 ConfigForm 根本不需要知道 MianForm 的存在:Mainform 创建配置表单,显示它,等待它关闭并从中提取数据。 ConfigForm 可以在另一个甚至 没有 MainForm class..

的项目中重用

你是在倒着看。配置对话框不应尝试更新主窗体。相反,它应该只通过 public methods/properties.

公开配置数据

由于 ShowDialog 块,您可以在它 returns 之后查询配置表单对象以获取数据:

Config config = new Config();
config.ShowDialog();

var ftpUser = config.FTPUser;
var pwd = config.FTPPwd;
var addr = config.FTPAddr

另一方面,我不会在这样的构造函数中执行阻塞工作。使用 'OnShown' 事件是一个更好的地方。