我们可以从 Form1 访问 Form2 通过这种方式:
在Form1中:
private buttonForm1_click(object sender,EventArgs e)
{
Form2 frm2 = new Form2()
frm2.show()
this.hide()
}
在Form2中,我们想要访问它已隐藏的 Form1 。
在Form2中:
private buttonForm2_click(object sender,EventArgs e)
{
//What Can I DO ?
//I Don't Want to Create Another Instance From Form1
}
答案 0 :(得分:1)
如果您希望两个表单可以互相访问,那么他们需要以某种方式了解彼此。一种方法是父母/子女关系。但是,这可能不是你想要做的。另一种选择是以这种方式对每个表单的引用进行限定,以便两者都可以访问它们。
第三种方法是在打开Form2时将Form1的引用传递给Form2。在Form2中创建Form1变量并在从Form1打开Form2时填充它。当你希望两个表单可以相互访问但它不能很好地扩展时,这将起作用。
答案 1 :(得分:1)
您可以将Form1
对象传递给Form2
构造函数:
public partial class Form1
{
// ...
private buttonForm1_click(object sender,EventArgs e)
{
Form2 frm2 = new Form2(this)
frm2.show()
this.hide()
}
// ...
}
public partial class Form2
{
private Form1 _form1;
public Form2(Form1 form1)
{
InitializeComponents();
_form1 = form1;
}
// ...
private buttonForm2_click(object sender,EventArgs e)
{
_form1.Show();
}
}
答案 2 :(得分:1)
在Form1上:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Form1Form2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var f = new Form2(this);
f.Show();
}
}
}
在Form2上:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Form1Form2
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
Form1 _f1 = null;
public Form2(Form1 f) : this()
{
_f1 = f;
}
private void button1_Click(object sender, EventArgs e)
{
_f1.Text = "Nice!";
}
}
}
答案 3 :(得分:0)
简单的答案是在Form2构造函数中传递对Form1的引用。
这样,在Form2中,您可以使用一个引用并访问其控件或调用其中的方法。
答案 4 :(得分:0)
如果您没有创建表单的多个副本,我发现这是最简单的方法。让表单本身创建一个句柄:
public partial class Form1
{
public static Form1 Current;
public Form1()
{
InitializeComponents();
Current = this;
}
}
public partial class Form2
{
public static Form2 Current;
public Form2()
{
InitializeComponents();
Current = this;
}
private buttonForm2_click(object sender,EventArgs e)
{
Form1.Current.Show();
}
}
如果人们关闭表格会变得有点复杂。所以在Closing处理程序中(如果你想保留句柄):
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
Visible = false;
WindowState = FormWindowState.Minimized;
}
e.Cancel
将使表单不会被实际销毁,需要您再次创建它。虽然如果你想要它被破坏,你总是可以通过将Current变量转换为Current属性来再次创建一个新属性,该属性创建一个新的get;
。