[英]How can I programmatically make a control added to a form, public?
例如
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相同的方式設置該文本框的text屬性。
之所以可以使用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.
}
您可以將此行添加到Form1.cs
文件中的Form1
類中。
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()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.