子窗体运行时防止初始窗体“刷新”

时间:2019-02-07 18:48:35

标签: c# .net winforms

我有以下(经过改进的)代码:

Form1

public partial class Form1 : Form
{
    GetIP getIP;
    string deviceIP = "";

    public Form1()
    {
        InitializeComponent();

        if (deviceIP == "") 
        {
            getIP = new GetIP();
            var result = getIP.ShowDialog();
            if (result == DialogResult.OK)
            {
                string ip = getIP.IPAddress;
                deviceIP = ip;
            }
        }
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        form2 = new Form2();
        form2.ShowDialog();
    }
}

GetIP

public partial class GetIP : Form
{
    public string IPAddress { get; set; }
    public GetIP()
    {
        InitializeComponent();
    }

    private void btnConnect_Click(object sender, EventArgs e)
    {
        IPAddress = txtIPAddress.Text;
        DialogResult = DialogResult.OK;
        Close();
    }
}

Form2

public partial class Form2 : Form
{
    Form1 form1 = new Form1(); // oops...this might be it?

    public Form2(string deviceData)
    {
        InitializeComponent();
        // Force CRLF (\r\n) on all newline instances
        deviceData = deviceData.Replace("\r\n", "\n");
        deviceData = deviceData.Replace("\r", "\n"); 
        deviceData = deviceData.Replace("\n", "\r\n");
        txtdeviceData.Text = deviceData;
    }

    private void btnClose_Click(object sender, EventArgs e)
    {
        Close();
    }
}

我的问题是,每当Form2尝试打开时,Form1似乎都会刷新。这将导致GetIP再次运行(这也意味着deviceIP已重新初始化为“”)。 Form2完成之前,GetIP才打开。

deviceIP == ""的检查是我解决问题的尝试,但是似乎变量初始化也重新运行,因此使检查无效。

是否有防止Form1刷新的方法,或者至少有一种防止再次GetIP重新运行的方法?

更新
嗯,我刚刚注意到我似乎有一条剩下的代码行,它创建了一个Form1实例...

1 个答案:

答案 0 :(得分:2)

public partial class Form2 : Form
{
    Form1 form1 = new Form1(); // oops...this might be it?

是的,就是“哎呀”。

如果Form2需要引用Form1,请尝试将其传递给构造函数:

public partial class Form2 : Form
{
  Form1 form1 = null;

  public Form2(Form1 f1, string deviceData) {
    InitializeComponent();
    form1 = f1;
    // etc, etc.
  }