RichTextbox文本值不会更新

时间:2014-05-05 23:02:46

标签: c# class textbox artificial-intelligence updating

我试图制作一种能够从我的网络服务器收集信息的AI。

我有一个按钮可以打开和关闭AI以及一些传递args来收集信息的方法。当ai打开电源时,它会通过一个名为powerOn的事件系统。我试图设置一个richtextbox来打招呼或类似的东西但是 文本框在被告知

时不会更新

主程序的程序类:

namespace Universe_AI
{
public static class Program
{
    public static Boolean aiRunning = false;
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    public static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    public static void writeMemory(string header, string value)
    {

    }

    public static void readMemory()
    {

    }

    public static void AiProccess(string pType, String[] pArgs)
    {
        if (pType == "event")
        {
            string pEvent = pArgs[0];
            aiEvent(pEvent);
        }
    }

    public static void aiEvent(string pEvent){
        if (pEvent == "powerOn")
        {
            Form1 ele = new Form1();
            ele.Mind.Text = "test";
            ele.Mind.AppendText("Are you my Creator?");
        }
    }
}
}

Form1 Class

namespace Universe_AI
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (Program.aiRunning == false)
        {
            Program.aiRunning = true;
            label2.Text = "ON";
            String[] eventArgs = new String[] {"powerOn"};
            Program.AiProccess("event", eventArgs);
        }
        else
        {
            Program.aiRunning = false;
            label2.Text = "OFF";
            Mind.Text = "";
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Mind.Text = "test";
    }
}
}

富文本框女巫名为Mind设置为公开并且不会返回错误。 测试按钮会更新它,但是当尝试从另一个类访问它时,它不能正常工作

2 个答案:

答案 0 :(得分:0)

这引用了一个完全独立的Form1实例,而不是用户看到的实例:

public static void aiEvent(string pEvent)
{
    if (pEvent == "powerOn")
    {
        Form1 ele = new Form1();  // new instance, unrelated to the form displayed
        ele.Mind.Text = "test";
        ele.Mind.AppendText("Are you my Creator?");
    }
}

if块结束时,您正在创建一个超出范围的本地实例。

至少,您必须通过其他方法(Form1AiProccess)传递对当前aiEvent实例的引用,以便访问当前RichTextBox

答案 1 :(得分:0)

这一行:

Form1 ele = new Form1();

创建一个新表单..其中的所有内容也是新的。这意味着你有一个新的,完全独立的形式,其内存中有RichTextBox// Add the Form as an argument at the end ---------------> ___here___ public static void AiProccess(string pType, String[] pArgs, Form1 form) { if (pType == "event") { string pEvent = pArgs[0]; aiEvent(pEvent, form); // pass it in } } public static void aiEvent(string pEvent, Form1 form){ if (pEvent == "powerOn") { // use the "form" variable here form.Mind.Text = "test"; form.Mind.AppendText("Are you my Creator?"); } } 。这就是你要附加文字的内容。

您需要做的是传递您当前正在使用的表格的实例..在这里阅读评论:

String[] eventArgs = new String[] {"powerOn"};
Program.AiProccess("event", eventArgs, this); // <---- pass "this"

阅读代码中的注释。然后,您可以像这样传递当前实例:

{{1}}