簡體   English   中英

如何以編程方式將控件添加到表單中,成為公開的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM