在论坛及google上搜了一下form之间的的控件的值的相互访问的问题,看到了一些方法,学了以后,感觉,自己的思维(语法和习惯)还停留在C++上,所以在C#中,有的问题就解决不了了。自己做了几个测验,分别是通过静态成员、show方法、委托和事件这四种方法也实现的,其实委托和事件在本测试中基本上都是一样的,只不过是把定义的委托成员前加一个event关键字就成了事件成员了。在这四个测试中,主要实现,从从窗口中向主窗口中传值。其中界面都是一样的,每个测试中,主界面就是一个textBox,一个button,同样,从界面也是如此。
测试1,用show方法:
代码如下:由于
主界面:
namespace form传值测试
{
public partial class mainForm1 : Form
{
public mainForm1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
subMain1 form2 = new subMain1();
form2.Show(this);
}
}
}
从界面代码:
public partial class subMain1 : Form
{
public subMain1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
mainForm1 mainform = (mainForm1)this.Owner;
mainform.textBox1.Text = textBox1.Text;
this.Close();
}
}
测试2:用类的静态成员:
主界面代码:
public partial class mainForm2 : Form
{
public mainForm2()
{
InitializeComponent();
}
static public string mem1;
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
subMain2 sub2 = new subMain2();
sub2.ShowDialog();
textBox1.Text = mem1;
}
}
从界面代码:
public partial class subMain2 : Form
{
public subMain2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
mainForm2.mem1 = textBox1.Text;
this.Close();
}
}
测试3:用委托和事件一起说吧算是一个:
主界面代码:
public partial class mainForm3 : Form
{
public mainForm3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
subMain3 sub3 = new subMain3();
sub3.setmain += setTxtBoxTxt;
sub3.ShowDialog();
}
void setTxtBoxTxt(string text)
{
this.textBox1.Text = text;
}
}
从界面代码:
public partial class subMain3 : Form
{
public subMain3()
{
InitializeComponent();
}
public delegate void setTBtxt(string str);
public setTBtxt setmain;
//当是事件是用以下声明就可以了:
//delegate void setTBtext(string str);
//public event setTBtext setText;
void button1_Click(object sender, EventArgs e)
{
setmain(textBox1.Text);
this.Close();
}
}