WinForm类中动态创建Label时Controls.Add方法应使用什么上下文?
解决方案
你可以从两种常用实现思路里选,都可以解决f1替换的问题:
- 方案1:给自定义类的标签创建方法新增
Form parentForm入参
自定义类中创建完Label并配置属性后,把原来的f1.Controls.Add(label)替换为parentForm.Controls.Add(label)。后续在Form1中调用这个方法时,直接传入this(指代当前Form1的实例)即可。
示例代码:// 自定义类中的方法实现 public void GenerateLabel(Form parentForm) { Label dynamicLabel = new Label(); // 这里写你给Label配置Text、位置、大小、字体的相关代码 parentForm.Controls.Add(dynamicLabel); } // Form1代码中调用 private void Form1_Load(object sender, EventArgs e) { 你的自定义类名 classInstance = new 你的自定义类名(); classInstance.GenerateLabel(this); } - 方案2:自定义方法直接返回创建好的Label实例(更推荐,耦合度更低)
不需要在自定义类中执行添加控件的操作,把配置完属性的Label实例直接返回,在Form1的调用代码中执行添加即可,不需要传参,也不需要写f1相关的代码。
示例代码:// 自定义类中的方法实现 public Label GenerateLabel() { Label dynamicLabel = new Label(); // 这里写你给Label配置Text、位置、大小、字体的相关代码 return dynamicLabel; } // Form1代码中调用 private void Form1_Load(object sender, EventArgs e) { 你的自定义类名 classInstance = new 你的自定义类名(); Label newLabel = classInstance.GenerateLabel(); this.Controls.Add(newLabel); }
内容的提问来源于stack exchange,提问作者emreGl
相关产品推荐
相关产品推荐

