如图,我有一个TabPage里面有很多个输入框,用来设置不同目录的,我希望窗体加载的时候Text下面的textBox的name自动变成上面label显示的文字,即textBox1.name=label1.Text;,这个数量都是对应的1对1,2对2textbox控件历遍

解决方案 »

  1.   

    他俩必须有关联,才能找到对应的label ,比如设置他们每对的tag属性都一样,那么可以根据tag值去遍历查找lable,或者text的tag设置为lable的名字,然后通过this.Controls[text.Tag.ToString()]找到lable
      

  2.   

    更建议你将lable和text组合到一起,做一个自定义组件
      

  3.   

    还不懂怎么组合到一起,请指教一下
    另外不能根据控件编号来对应吗?比如label1对应textBox1,label2对应textBox2
      

  4.   

    右键 添加 组件 基础 panel  之后 在 这个 panel  里 加 一个 lable  和 textbox  控件固定好  他们 的 位置 也可以写 事件 
      

  5.   

    可以根据编号来对应的。
    如果你的窗体像顶楼那样,可以直接用下面的代码,这里面没有验证。            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;
                            }                    }
                    }
                }
      

  6.   

    可以根据编号来对应的。
    如果你的窗体像顶楼那样,可以直接用下面的代码,这里面没有验证。            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中呢?
      

  7.   

    UserControl
    Lable+TextBox+FolderBrowserDialog
      

  8.   

    第一个问题:控件的名称是可以带冒号的,变量的名称是不能带冒号的。textBox的name哪里填写的名称,有多个多用的,其中一个设定textBox.name,另一个是textBox控件的变量名称。
    第二个问题:可以使用textBox点击事件的第一个参数。        private void textBox1_TextChanged(object sender, EventArgs e)
            {
                //如果是textBox1点击进入,那么sender其实是textBox1
                //如果是textBox2点击进入,那么sender其实是textBox2
                //做一下类型变换就行了
                TextBox txt = sender as TextBox ;
                txt.Name = "文件夹路径";
            }
      

  9.   

    改正一下
    txt.Text = "文件夹路径";
      

  10.   

    谢谢,解决问题
    开始的时候我是在网上找到了一个this.ActiveControl.Name,虽然也可以正确,但不知道会不会出错。