C# 如何引用已声明的对象

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); 当我尝试此操作时,它返回一个错误,指

这是我的问题。。。我正在创建一个私人消息系统。我有主表单(Form1)和专用消息屏幕(pm_屏幕),当我打开专用消息屏幕时,我希望将此表单中的数据发送回原始表单。但是我不知道怎么写这个。以下是私人消息屏幕上BTN发送事件的代码

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项目中使用的一种干净有效的方法。它解决了我长期存在的表单间通信问题!