从另一个表单更新文本框。 C#

时间:2016-03-04 14:51:43

标签: c# forms textbox

我已经查看了各种答案,我已经用谷歌搜索了我的坚果几个小时了,但似乎仍然无法让这个工作。 我正在尝试更新表单上的文本框。我已经简化了我正在使用的代码,希望它只是我不必要地添加的东西,但仍然无法让它工作。 我知道文本正在传递到文本框并存储在框中,但它不会显示在实际框中。

表格一(Form_DMM);

private void BtnTest_Click(object sender, EventArgs e)
{
    ErrorHandling EH = new ErrorHandling();
    EH.updatetbtest();
}

在单独的课程中;

    public void updatetbtest()
    {
        string FailedMessagePB = "Test Message" + "\n";
        Form_DMM FormDMM = new Form_DMM();
        FormDMM.TextBoxAppend(FailedMessagePB);
        FormDMM.TextBoxAppend2 = FailedMessagePB;
        FormDMM = null;
    }

传回形成一个;

public void TextBoxAppend(string WriteMessage)
{
    TB_Issues.AppendText(WriteMessage + "\n");
    System.Windows.Forms.Application.DoEvents();
    TB_Issues.Invalidate();
    TB_Issues.Update();
    TB_Issues.Refresh();
    MessageBox.Show(TB_Issues.Text);
}

    public string TextBoxAppend2
    {
        get
        {
            return TB_Issues.Text;
        }
        set
        {
            TB_Issues.Text = TB_Issues.Text + value + "\n";
            System.Windows.Forms.Application.DoEvents();
            TB_Issues.Invalidate();
            TB_Issues.Update();
            TB_Issues.Refresh();

            MessageBox.Show(TB_Issues.Text);
        }

    }

正如您所看到的,我有两次单独的更新文本框的尝试,两者都不会在文本框中显示测试消息,但弹出的消息框将显示测试消息。它甚至会显示来自TB_Issues.AppendText()的双重测试消息。

有人可以帮忙告诉我哪里出错了。这让我疯了!

3 个答案:

答案 0 :(得分:2)

你可以像这样使用

public void updatetbtest(Form_DMM FormDMM)
    {
        string FailedMessagePB = "Test Message" + "\n";
        FormDMM.TextBoxAppend(FailedMessagePB);
        FormDMM.TextBoxAppend2 = FailedMessagePB;
    }

并在你的buttontest_Click

private void BtnTest_Click(object sender, EventArgs e)
    {
        ErrorHandling EH = new ErrorHandling();
        EH.updatetbtest(this);
    }

答案 1 :(得分:1)

从发布的问题中,错误发生在ErrorHandling类中。 在updatetbtest方法中,您将创建表单对象的新Insance。因此,您创建一个单独的表单对象,更改文本然后丢失任何引用,因为您将该变量设置为null。将显示消息框,因为调用了TextBoxAppend方法,并且消息框是一个单独的实例。您创建的新实例永远不会显示。

您必须将调用表单实例移交给updatetbtest方法。

这样的事情:

private void BtnTest_Click(object sender, EventArgs e)
{
    ErrorHandling EH = new ErrorHandling();
    EH.updatetbtest(this);
}


public void updatetbtest(Form_DMM form)
{
    string FailedMessagePB = "Test Message" + "\n";
    form.TextBoxAppend(FailedMessagePB);
}

答案 2 :(得分:1)

您尝试创建新表单。但你必须使用现有的。 您可以传递现有表单调用EH.updatetbtest(this); 当然,在updatetbtest(Form_DMM FormDMM)之类的声明中添加参数。并在函数体中删除声明和new。