小白winform求助。

胡金鑫 2021-05-08 07:15:22
本人土木狗,论文需要,开发窗口程序,各位大佬,怎么通过与字符串修改这个字段的属性啊……
...全文
1050 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
morliz子轩 2021-05-13
  • 打赏
  • 举报
回复
递归查找获取控件:

/// <summary>
        /// 根据指定容器和控件名字,获得控件
        /// </summary>
        /// <param name="obj">容器</param>
        /// <param name="strControlName">控件名字</param>
        /// <returns></returns>
        private object GetControlInstance(object obj,string strControlName)
        {
            System.Collections.IEnumerator _Controls = null;    //所有控件
            Control c = null;   //当前控件
            object cResult = null;  //查找结果

            if (obj.GetType() == this.GetType())    //窗体
                _Controls = this.Controls.GetEnumerator();
            else
                //控件
                _Controls = ((Control)obj).Controls.GetEnumerator();

            //遍历操作
            while (_Controls.MoveNext())
            {
                //当前控件
                c = (Control)_Controls.Current;
                if (c.HasChildren)  //当前控件是个容器
                {
                    cResult = GetControlInstance(c, strControlName);    //递归查找
                    if (cResult == null)    //当前容器中没有,跳出,继续查找
                        continue;
                    else
                        //找到控件,返回
                        return cResult;
                }
                else if (c.Name == strControlName)
                    //不是容器,同时找到控件,返回
                    return c;
            }
            return null;
        }
调用方法 For Example:

((Button)GetControlInstance(this, "button7")).BackColor = Color.Red;
((Button)GetControlInstance(this.groupBox1, "button1")).PerformClick();
胡金鑫 2021-05-12
  • 打赏
  • 举报
回复
引用 12 楼 zemkey 的回复:
要用到反射吧?
能具体说一下吗
zemkey 2021-05-12
  • 打赏
  • 举报
回复
要用到反射吧?
luj_1768 2021-05-12
  • 打赏
  • 举报
回复
??string a1 = “textBox1” 赋值语句中的引号怎么讲?你用调试工具看一看你的变量有关的属性呀。
xuzuning 2021-05-11
  • 打赏
  • 举报
回复
Controls["textBox1"]
morliz子轩 2021-05-11
  • 打赏
  • 举报
回复
引用 5 楼 紫魂一号 的回复:
this.groupBox11.Controls.FindControl("控件名") as TextBox; 你看合适不?还需要写那么多么?
Form自带的GroupBox控件,没有实现接口INamingContainer。是无法调用.FindControl()方法的。 除非自定义写的控件。
  • 打赏
  • 举报
回复
解决就好,不客气
塔克茜丝 2021-05-11
  • 打赏
  • 举报
回复
你的textbox1是个控件,这个控件的name的string是textbox1. 你得找到这个控件先
胡金鑫 2021-05-10
  • 打赏
  • 举报
回复
引用 5 楼 紫魂一号 的回复:
this.groupBox11.Controls.FindControl("控件名") as TextBox; 你看合适不?还需要写那么多么?
哇[face]monkey2:062.png[/face][face]monkey2:062.png[/face][face]monkey2:062.png[/face],这个确实又简洁了许多,谢谢你的回帖!
紫魂一号 2021-05-10
  • 打赏
  • 举报
回复
this.groupBox11.Controls.FindControl("控件名") as TextBox; 你看合适不?还需要写那么多么?
胡金鑫 2021-05-08
  • 打赏
  • 举报
回复
引用 3 楼 glb21 的回复:
用控件的tag属性存名字,然后比较所有控件的tag和你的字符串比较,就可以找到这个控件。 或反射不知道行不行。
foreach (Control c in this.groupBox11.Controls) { if (c.Name == "textBox33") { c.Enabled = false; } } 解决了,通过遍历容器的控件的Name属性来找到相应的控件,你的回答给了我很大帮助,谢谢你!
glb21 2021-05-08
  • 打赏
  • 举报
回复
用控件的tag属性存名字,然后比较所有控件的tag和你的字符串比较,就可以找到这个控件。 或反射不知道行不行。
胡金鑫 2021-05-08
  • 打赏
  • 举报
回复
引用 1 楼 weixin_41240465 的回复:
this.textBox1.text=a1;
Type t = textBox1.GetType(); t.GetField("textBox1").SetValue(Visible,false); 想要实现这个方法……但是一直不成功
weixin_41240465 2021-05-08
  • 打赏
  • 举报
回复
this.textBox1.text=a1;

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧