无法访问以编程方式添加的控件(C#)

时间:2017-07-31 20:46:00

标签: c# textbox

我没有在design.cs中使用预先制作的TextBox控件,而是使用以编程方式添加的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()
调用

方法,但没有任何反应。

1 个答案:

答案 0 :(得分:2)

您正在MainForm方法中创建processData的全新实例。一个没有以编程方式创建TextBox的文件(它没有显示/ Load从不调用 - 这也不是正确访问MainForms的方法)。因此,当您调用EmptyTextBox().

时,您将收到NullReferenceException

您可以将MainForm的引用传递给SubForm的construtor(同时删除new MainForm行):

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