You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WinForm窗体多用户控件管理:修改第二个控件TextBox文本方法

嘿,这个问题其实挺典型的——你当前的代码创建了4个用户控件,但没有保留它们的引用,所以之后没办法直接定位到第二个控件修改它的TextBox内容。给你两种实用的解决思路:

方法1:用集合存储控件引用,后续按需修改

这种方式比较灵活,适合需要在循环结束后再修改控件的场景:

// 先声明一个集合来保存创建的用户控件
List<XtraUserControl1> controlList = new List<XtraUserControl1>();
int i = 0; // 修正你代码里的变量名问题(原代码里的vari应该是i吧?)
for(int a = 0; a <= 3; a++) 
{
    i += 100;
    var control = new XtraUserControl1();
    control.Location = new Point(0, i);
    this.Controls.Add(control);
    // 把控件添加到集合里,方便后续访问
    controlList.Add(control);
}

// 现在可以通过集合索引访问第二个控件(索引从0开始,所以第二个对应索引1)
// 注意:如果你的TextBox是用户控件里的私有成员,得先给XtraUserControl1加个公共属性暴露文本
controlList[1].SampleTextBoxText = "这是第二个控件的修改文本";

关键补充:

如果XtraUserControl1里的TextBox是默认的私有状态,你需要在用户控件的类里添加一个公共属性来对外暴露它的文本:

public string SampleTextBoxText
{
    get => textBox1.Text; // 替换成你实际的TextBox控件名称
    set => textBox1.Text = value;
}
方法2:循环内直接判断并修改

如果只需要在创建控件时就修改第二个的文本,直接在循环里判断当前迭代位置即可:

int i = 0;
for(int a = 0; a <= 3; a++) 
{
    i += 100;
    var control = new XtraUserControl1();
    control.Location = new Point(0, i);
    
    // 判断是不是第二个控件(a从0开始,第二个对应a=1)
    if(a == 1)
    {
        // 同样,私有TextBox用公共属性访问,否则直接操作控件
        control.SampleTextBoxText = "第二个控件的专属文本";
    }
    
    this.Controls.Add(control);
}

两种方法都能解决问题,看你更适配哪种场景啦~

内容的提问来源于stack exchange,提问作者Dio Chris

火山引擎 最新活动