簡體   English   中英

無法訪問以編程方式添加的控件(C#)

[英]Unable to access a programmatically-added control (C#)

我不是在design.cs中使用預制的TextBox控件,而是使用以編程方式添加的TextBox。 首先,該文本框由用戶填充,並使用按鈕onClick方法在另一個類文件中的方法內部處理內容,該類文件由onClick方法調用。 在那之后,我想刪除TextBox中的所有內容,並使其像初始狀態一樣為空,但效果不佳。

/*MainForm.cs*/
private TextBox tb;
private SubForm sf = new SubForm();
private void initTextBox(){
    tb = new TextBox();
    preExistingPanel.Controls.Add(tb); //attach the textbox onto a panel
}

private void MainForm_Load(object sender, EventArgs e){
    initTextBox();
}

private void button_Click(object sender, EventArgs e){
    string tbContent = tb.Text;
    sf.processData(tbContent);
}

public void EmptyTextBox(){
    tb.Text = "";        //This does not work, and nothing happens
}


/*SubForm.cs*/
public void processData(string tbContent){
    /*Do something with tbContent*/
    ...
    ...
    /*Here, I want to empty the textBox*/
    MainForm mf = new MainForm();
    mf.EmptyTextBox();
}

有人可以幫我找到這段代碼有什么問題嗎? 我知道

EmptyTextBox()

方法被調用,但是什么也沒有發生。

您正在processData方法中創建MainForm全新實例。 一種沒有以編程方式創建的TextBox(不會顯示/永遠不會調用Load的方式,無論如何這都不是訪問MainForms的正確方法)。 因此,當您調用EmptyTextBox().時,將獲得NullReferenceException EmptyTextBox().

您可以將對MainForm的引用傳遞給SubForm的構造方法(也可以刪除new MainForm行):

MainForm mf;
public SubForm (MainForm main)
{
    mf = main;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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