我试图制作一种能够从我的网络服务器收集信息的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设置为公开并且不会返回错误。 测试按钮会更新它,但是当尝试从另一个类访问它时,它不能正常工作
答案 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
块结束时,您正在创建一个超出范围的本地实例。
至少,您必须通过其他方法(Form1
和AiProccess
)传递对当前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}}