C# 如何引用已声明的对象
这是我的问题。。。我正在创建一个私人消息系统。我有主表单(Form1)和专用消息屏幕(pm_屏幕),当我打开专用消息屏幕时,我希望将此表单中的数据发送回原始表单。但是我不知道怎么写这个。以下是私人消息屏幕上BTN发送事件的代码C# 如何引用已声明的对象,c#,object-reference,C#,Object Reference,这是我的问题。。。我正在创建一个私人消息系统。我有主表单(Form1)和专用消息屏幕(pm_屏幕),当我打开专用消息屏幕时,我希望将此表单中的数据发送回原始表单。但是我不知道怎么写这个。以下是私人消息屏幕上BTN发送事件的代码 Message_Send = txtSend.Text.Trim(); Form1 frm1 = new Form1(); Invoke(new Form1._sendPM(frm1.sendPM), Message_Send); 当我尝试此操作时,它返回一个错误,指
Message_Send = txtSend.Text.Trim();
Form1 frm1 = new Form1();
Invoke(new Form1._sendPM(frm1.sendPM), Message_Send);
当我尝试此操作时,它返回一个错误,指出:
Object reference not set to an instance of an object
或者类似的东西。我的猜测是,这是因为我正在启动Form1的一个新实例,而一个实例已经存在。但我不知道如何访问这个“现有实例”。你对更有经验的程序员有什么建议吗
谢谢
编辑(添加发送方法)-位于表单1中
public delegate void _sendPM(string Send_Message);
public void sendPM(string Send_Message)
{
Server_Send("PM|" + Send_Message);
}
删除了我以前的答案,因为它解决了症状,但没有解决实际问题。您需要将代码结构重做为如下内容:
//Btw should be PmScreen or something else that follows naming conventions
public partial class pm_screen : Form
{
Form1 parentForm;
public pm_screen(Form1 parentForm)
{
this.parentForm = parentForm;
}
//Write GUI code for the class here...
public void acceptMessageFromParent(string message)
{
//Do stuff with string message
}
private void sendMessageToParent(string message)
{
parentForm.acceptMessageFromPrivate(message);
}
}
public partial class Form1 : Form
{
private void createPrivateMessageForm()
{
pm_screen privateScreen = new pm_screen(this);
//You might want to store privateScreen in a List here, so you can
//have several pm_screen instances per Form1
}
private void sendMessageToPrivate(pm_screen privateScreen, string message)
{
privateScreen.acceptMessageFromParent(message);
}
public void acceptMessageFromPrivate(string message)
{
//Do stuff with string message
}
}
我猜frm1.sendPM没有初始化,而且_sendPM在空sendPM上会消失。而且你的代码看起来很神秘。很难说你想做什么。那我怎么初始化它呢?frm1是始终打开的Form1?这不意味着它总是初始化的吗??你想让我添加什么信息来让它不那么神秘?发布整个代码,什么是_sendPM?我添加了_sendPM的方法。这个答案很吸引人。谢谢,没问题!这是我在自己的WinForm项目中使用的一种干净有效的方法。它解决了我长期存在的表单间通信问题!