WinForms:使用 c# 添加控件

Posted

技术标签:

【中文标题】WinForms:使用 c# 添加控件【英文标题】:WinForms: adding a control with c# 【发布时间】:2021-07-06 03:57:31 【问题描述】:

我是 C# 新手,我知道如何动态添加控件,但我不知道如何将该控件设置为 this.[control_name]。请注意,这里的thisForm

这可以使用private System.Windows.Forms.[Control_type] [control-name]; 静态完成,但我将如何通过方法执行此操作,以便稍后声明this.[control-name] = [variable]

请注意,variable 类似于 new TextBox()

【问题讨论】:

我这样做是因为我需要能够从创建控件的另一个范围引用该控件。所以我会使用this.[control-name],因为这在所有范围内都是通用的。 你不能这样做,因为代码不会编译 您可以拥有一个以名称为键的控件字典 @stuartd 那么我会使用Form.Controls.Find([dict],true)[0],我假设? 【参考方案1】:
var txt = new TextBox();  //txt is the variable you are looking for
Form1.Controls.Add(txt); //added it to the form

现在您可以通过txt访问它:

txt.Location = new Point(0,0);
txt.Visible = true;

如果您在方法中创建控件(正如您在 cmets 中提到的),您可以返回并使用它,如下所示:

public TextBox AddTextBox()

    var txt = new TextBox();  
    Form1.Controls.Add(txt); 
    return txt;


var newTxt = AddTextBox();
newTxt.Location = new Point(0,0);
newTxt.Visible = true;

【讨论】:

但是,如果我在方法内部执行代码的第一部分,然后在该方法外部执行第二部分,则会出现引用错误。我如何能够在创建它的方法之外引用这个文本框?谢谢。 在你希望访问的范围内声明变量,例如在表单类中的函数之外。 啊,是的,行得通!谢谢你。我还必须使用字典,在每个控件名称的末尾添加一个数字,这样每个名称都是唯一的。

以上是关于WinForms:使用 c# 添加控件的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForms 面板子定位非常不稳定?

C# WinForms 用鼠标拖动控件

如何创建悬停的 C# Winforms 控件

C# WinForms 有滑块控件吗?

如何使用c#在winforms中为每个用户授予权限

在 C# (WinForms) 中拦截应用程序中所有控件的单击事件