从另一个类更新文本框

时间:2012-02-18 23:19:06

标签: c# textbox

我正在尝试将名为“hex”的类中的文本框更新为主窗体。在“十六进制”类中,我有以下代码:

        Main m = new Main();
        m.updateTextBox(convertedHex);

代码将变量传递给主窗体到名为'updateTextBox'的方法,如下所示:

    public void updateLog(string input)
    {
        textBox2.AppendText(input);
    }

很抱歉,如果这看起来像是一个愚蠢的问题,我已经被困了一段时间,我谷歌搜索的所有链接现在都是紫色的,所以我希望有人能解释一下这个问题。非常感谢。

4 个答案:

答案 0 :(得分:4)

在Main类中添加这种方法,在其中创建textBox并从外部调用它。

假设您在Program.cs课程中添加了代码以启动新的

    // Add this code in Program.cs (or similar where you start the gui
    public static readonly Main MainLogWindow = new Main();

    // Add this code in Main.cs class 
    private delegate void NameCallBack(string varText);
    public void UpdateTextBox(string input) {
        if (InvokeRequired) {
            textBox.BeginInvoke(new NameCallBack(UpdateTextBox), new object[] {input});
        } else {
            textBox.Text = input;
            // textBox.Text = textBox.Text + Environment.NewLine + input // This might work as append in next line but haven't tested so not sure
        }
    }

在任何地方称之为Program.MainLogWindow.UpdateTextBox("test test");,假设您MainLogWindow打开

这也允许您从其他线程中调用更新。

答案 1 :(得分:2)

你还没有给我们很多信息。但正如我在评论中所说,如果您的启动表单为Main,则您显示的代码是创建新的Main表单,对其所做的任何更改都不会显示在您的用户界面中。您需要将表单实例传递给Hex类构造函数。我会做这样的事情(假设命名空间是相同的,它们在同一个线程上,你的Hex类不是静态的。如果在不同的线程上你需要使用MadBoy显示的方法)

public partial class Form1 : Form
{
    Hex hex;
    public Form1()
    {
        InitializeComponent();
        hex = new Hex(this);
    }
}


class Hex
{
    Form1 m;

    public Hex( Form1 frm)
    {
        m = frm;
        m.updateTextBox("Hello World");
    }
}

答案 2 :(得分:0)

您的类(可能是业务对象)通常不应该关注更新UI。它并不特别需要知道您甚至拥有 UI。但是你可以使用几种不同的有用方法。

1)只需让您的UI调用业务对象的方法,然后让方法返回一个值,然后UI就可以选择显示它。

// inside Main form
var hex = new Hex();
string convertedHex = hex.GetConvertedHex(someArgument);
UpdateTextBox(convertedHex);

2)让您的业务对象公开事件。该事件的参数将包括需要向订阅该事件的任何人广播的任何字符串。用户界面将成为订阅者之一。

在这两个想法中,我通常会选择第一个,除非你确实需要一个事件模型。

答案 3 :(得分:0)

jest simple不需要将所有这些文本框从属性公开,并通过类似这样的方法将当前表单对象传递给类

public void mthod(){

//crete a obj of the class

cls1 obj=new clas1();

obj.smethod(this); 

}

现在在课堂上可以像这样进行校准

smethod(from1 obj){
obj.textbox.text="";
}