如图,我有一个TabPage里面有很多个输入框,用来设置不同目录的,我希望窗体加载的时候Text下面的textBox的name自动变成上面label显示的文字,即textBox1.name=label1.Text;,这个数量都是对应的1对1,2对2textbox控件历遍
如图,我有一个TabPage里面有很多个输入框,用来设置不同目录的,我希望窗体加载的时候Text下面的textBox的name自动变成上面label显示的文字,即textBox1.name=label1.Text;,这个数量都是对应的1对1,2对2textbox控件历遍
另外不能根据控件编号来对应吗?比如label1对应textBox1,label2对应textBox2
如果你的窗体像顶楼那样,可以直接用下面的代码,这里面没有验证。 Label[] arrLabel = this.Controls.OfType<Label>().ToArray();
foreach (Label lbl in arrLabel)
{
string sIndex = lbl.Name.Substring(5, lbl.Name.Length - 5);
Control[] arr = this.Controls.Find("textBox" + sIndex, false);
{
TextBox txt = arr[0] as TextBox;
txt.Name = lbl.Text;
}
}你也可以在此基础上,添加一些验证条件。 Label[] arrLabel = this.Controls.OfType<Label>().ToArray();
foreach (Label lbl in arrLabel)
{
//
if (lbl.Name.Length > 5 && lbl.Name.Substring(0, 5) == "label")
{
string sIndex = lbl.Name.Substring(5, lbl.Name.Length - 5);
int iIndex = 0;
bool bRet = int.TryParse(sIndex, out iIndex);
if (bRet && iIndex > 0)
{
//
Control[] arr = this.Controls.Find("textBox" + sIndex, false);
if (arr.Length == 1 && arr[0] is TextBox)
{
TextBox txt = arr[0] as TextBox;
txt.Name = lbl.Text;
} }
}
}
如果你的窗体像顶楼那样,可以直接用下面的代码,这里面没有验证。 Label[] arrLabel = this.Controls.OfType<Label>().ToArray();
foreach (Label lbl in arrLabel)
{
string sIndex = lbl.Name.Substring(5, lbl.Name.Length - 5);
Control[] arr = this.Controls.Find("textBox" + sIndex, false);
{
TextBox txt = arr[0] as TextBox;
txt.Name = lbl.Text;
}
}你也可以在此基础上,添加一些验证条件。 Label[] arrLabel = this.Controls.OfType<Label>().ToArray();
foreach (Label lbl in arrLabel)
{
//
if (lbl.Name.Length > 5 && lbl.Name.Substring(0, 5) == "label")
{
string sIndex = lbl.Name.Substring(5, lbl.Name.Length - 5);
int iIndex = 0;
bool bRet = int.TryParse(sIndex, out iIndex);
if (bRet && iIndex > 0)
{
//
Control[] arr = this.Controls.Find("textBox" + sIndex, false);
if (arr.Length == 1 && arr[0] is TextBox)
{
TextBox txt = arr[0] as TextBox;
txt.Name = lbl.Text;
} }
}
}
我使用了上面一段代码就可以用,不过有两个问题想请教一下:
第一个问题:为什么我的Label里带有冒号也通过,比如"图纸目录:",而直接把这个复制到textBox的name里是时就会弹出属性值无效?
第二个问题:我所有的鼠标点击textBox都采用同一个事件,即弹出选择文件夹的事件,并把选择的文件夹路径填进到textBox里面,我要怎么样才知道是点了哪一个textBox并把值输入到该textBox中呢?
Lable+TextBox+FolderBrowserDialog
第二个问题:可以使用textBox点击事件的第一个参数。 private void textBox1_TextChanged(object sender, EventArgs e)
{
//如果是textBox1点击进入,那么sender其实是textBox1
//如果是textBox2点击进入,那么sender其实是textBox2
//做一下类型变换就行了
TextBox txt = sender as TextBox ;
txt.Name = "文件夹路径";
}
txt.Text = "文件夹路径";
开始的时候我是在网上找到了一个this.ActiveControl.Name,虽然也可以正确,但不知道会不会出错。