我有以下(经过改进的)代码:
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
实例...
答案 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.
}