gpt4 book ai didi

c# - 如何以编程方式将控件添加到表单中,公开?

转载 作者:行者123 更新时间:2023-11-30 21:48:33 31 4
gpt4 key购买 nike

例如

    Form1 frm1 = new Form1();
TextBox tb = new TextBox();
frm1.Controls.Add(tb);

现在我不能说 frm1.tb 因为 tb 不是公开的。

如果我绘制了文本框,那么我可以转到属性窗口并将修饰符设置为公开。所以,我知道如何在 GUI 中执行此操作。

但是我怎样才能以编程方式做到这一点呢?

添加说明

有些人提出了 frm.tb 的替代方案,这不是我想要的。

我会详细说明。

考虑这个 winforms 程序。它有两种形式。 Form1 和 FormX

这是 FormX

enter image description here

Form1 在其加载中只有这段代码

    FormX frmx = new FormX();
frmx.drawnTextBox.Text = "blah"; //works
TextBox programmaticallyMadeTextbox = new TextBox();

frmx.Controls.Add(programmaticallyMadeTextbox);
frmx.Show();
frmx.programmaticallyMadeTextbox.Text = "asdf"; // does not compile
// can't say frm1.programmaticallyMadeTextbox.Text="asdf"
// why not?
// I suppose because programmaticallyMadeTextbox is not public
// how can I make it public like my drawnTextBox is public?

它的目的是向 FormX 添加一个文本框,并像我对 drawnTextBox 一样设置文本框的文本属性。

我之所以可以使用 drawnTextBox 做到这一点,是因为我将修饰符属性设置为 public。我想以某种方式使用我以编程方式制作的文本框来做到这一点。

最佳答案

通常我在动态添加控件时这样做,给它们一个(正确的)名称,并在需要时从集合中找到控件。

TextBox textbox = new TextBox();
// other properties
textbox.Name = "newtextbox"; // Any unique name
form1.Controls.Add(textbox);

现在您可以访问元素了。

var textbox = Controls.OfType(TextBox)().FirstOrDefault(x=>x.Name == "newtextbox");

if(textbox != null)
{
// access element.
}

关于c# - 如何以编程方式将控件添加到表单中,公开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37558581/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com