积极答复者
winform tabControl加载同一个控件保存问题

问题
-
问题是这样的:在一个窗体(From1)上有一个tabControl(tabMain)和一个button(btSave),
tabMain(后台代码加载tabPage)有tabPage0,tabPage1,tabpage2,,3个页面,3个页面加载同一个用户控件 userControl1(比如说这个用户控件只用一个TextBox(txtName)),
然后运行程序后,我在tabPage0的txtName写上文字(比如是a),我在tabPage1的txtName写上文字(比如是b),我在tabPage2的txtName写上文字(比如是c),然后按btSave保存,怎么样一次性 得到这3个值(a,b,c),
希望高手帮帮忙啊。。
Form1.cs:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//DataTable ds = SetParamClass.XmlFileToDataTable();
//for (int i = 0; i < ds.Rows.Count; i++)
for (int i = 0; i < 3; i++)
{
this.tabMain.TabPages.Add(i.ToString(),"tabPage"+i.ToString());
this.tabMain.TabPages[i].Controls.Add(new UserControl1());
}
}
private void btSave_Click(object sender, EventArgs e)
{
string result= new UserControl1().GetValue();
MessageBox.Show(result);
}
}
private void btSave_Click(object sender, EventArgs e)
{
string result= new UserControl1().GetValue();
MessageBox.Show(result); //这个值怎么一次性得到,而且是3 个 ??
}UserControl1.cs:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public string GetValue()
{
string returnValue = this.txtName.Text;
return returnValue;
}
}
答案
-
你好!
我谈谈我的个人看法啊!可能不成熟,但是希望对你有帮助:
1,在UserControl1的定义中,通过属性来暴露这个值,而不是通过GetValue方法
2, 如果你按这个方法,获取不到这个值的:
private void btSave_Click(object sender, EventArgs e)
{
string result= new UserControl1().GetValue(); //这里是新初始化的UserControl1实例,并非添加到TabPage中的那个实例,所以这样只能获取到txtName的初始值,如果你没有特意设置,通常是空!
MessageBox.Show(result);
}3,说去三个值没有太简单的方法,只能通过循环分别来获取!
周雪峰- 已标记为答案 Csharpzero 2010年5月20日 5:21
全部回复
-
你好!
我谈谈我的个人看法啊!可能不成熟,但是希望对你有帮助:
1,在UserControl1的定义中,通过属性来暴露这个值,而不是通过GetValue方法
2, 如果你按这个方法,获取不到这个值的:
private void btSave_Click(object sender, EventArgs e)
{
string result= new UserControl1().GetValue(); //这里是新初始化的UserControl1实例,并非添加到TabPage中的那个实例,所以这样只能获取到txtName的初始值,如果你没有特意设置,通常是空!
MessageBox.Show(result);
}3,说去三个值没有太简单的方法,只能通过循环分别来获取!
周雪峰- 已标记为答案 Csharpzero 2010年5月20日 5:21
-
其实问题本身是比较复杂的。只是我把它简单化了提出来,需要怎么一个方法
。。不然要写很长。。
Form1.cs:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//DataTable ds = SetParamClass.XmlFileToDataTable();
//for (int i = 0; i < ds.Rows.Count; i++)
for (int i = 0; i < 3; i++)
{
this.tabMain.TabPages.Add(i.ToString(),"tabPage"+i.ToString());
this.tabMain.TabPages[i].Controls.Add(new UserControl1());
}
}
private void btSave_Click(object sender, EventArgs e)
{
UserControl1 us=new UserControl1();us.WriteToXml();
}}
UserControl1.cs:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public string WriteToXml(){
string name = this.txtName.Text;string leng= this.txtLeng.Text;
string width=this.txtWidth.Text;
......等等
SetParamClass.SaveToXml(name,leng,width );}
}
其它就是想在Form1中点击btSave按钮,一次性保存Form1中各个tabPage加载的UserControl1中的多个TextBox的值到Xml文件。就是TexBox的值得不到。。