例如
Form1 frm1 = new Form1();
TextBox tb = new TextBox();
frm1.Controls.Add(tb);
现在我无法说frm1.tb
,因为tb不公开。
如果我绘制了文本框,那么我可以转到属性窗口并将修改器设置为public。所以,我知道如何在GUI中完成它。
但我怎么能以编程方式进行呢?
添加了澄清
有些人提出了frm.tb的替代方案,这不是我想要的。
我会详细说明。
考虑这个winforms计划。它有两种形式。 Form1和FormX
这是FormX
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一样。
我能用drawTextBox做到这一点的原因是我将modifier属性设置为public。我想以某种方式用我编程的文本框来做到这一点。
答案 0 :(得分:4)
通常我会在动态添加控件时执行此操作,为其提供(正确的)名称,并在需要时从集合中查找控件。
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.
}
答案 1 :(得分:-1)
您可以将此行添加到Form1
文件中的Form1.cs
类。
public TextBox tb;
并将您的示例更改为
Form1 frm1 = new Form1();
frm1.tb = new TextBox();
frm1.Controls.Add(frm1.tb);
或者您可以使用TextBox
或frm1.Controls.OfType<TextBox>().Single()
或frm1.Controls.OfType<TextBox>().First()
访问frm1.Controls.OfType<TextBox>().Last()
。