2014-05-05 72 views
1

我試圖做出一種AI的是打算從我的Web服務器收集信息。文字的RichTextbox值將不會更新

我有切換的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類

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"; 
    } 
} 
} 

RichTextBox的巫婆被稱爲心靈被設置爲公開,並且不返回錯誤。 測試按鈕更新,但是當試圖從另一個類訪問它不縫工作

回答

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" 
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塊結束時,創建一個超出範圍的本地實例。

至少,您必須通過其他方法(AiProccessaiEvent)傳遞對當前Form1實例的引用,才能訪問當前的RichTextBox