使用Form1's公共变量从Form1调用Form2's函数
本文关键字:Form1 调用 Form2 函数 使用 变量 | 更新日期: 2023-09-27 18:10:39
所以基本上,我的程序用套接字将你登录到游戏中,一旦你登录"控制面板"按钮出现,就可以修改游戏中的一些内容,比如在游戏中发送消息。"控制面板"按钮通过一个新表单显示所有这些功能。现在我将提供Form1打开Form2的代码片段。
private void cpanel_btn_Click(object sender, EventArgs e)
{
Form2 cPanel = new Form2();
cPanel.Show();
}
可以看到,它显示了Form2。我正在努力让Form2与Form1沟通。基本上,Form2可以与Form1通信,只要运行简单的void(函数)——但仅此而已。下面是Form2的构造函数类。我给了它一个公共名称"Main",并在Form2类的顶部设置了一个"公共Form1 Main"。这是Form2的完整类。
namespace WindowsFormsApplication2
{
public partial class Form2 : Form
{
public Form1 Main;
public Form2()
{
this.FormBorderStyle = FormBorderStyle.FixedSingle;
InitializeComponent();
this.Main = new Form1();
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
this.Main.sendGameData("Hello world!");
}
}
}
正如你所看到的,这个类底部的按钮的void试图与Form1通信并发送一些数据。然而,它运行了这个函数,但是让我们看看Form1的"sendGameData"void。
public void sendGameData(string data)
{
data += "'x00";
byte[] game_data = Encoding.UTF8.GetBytes(data);
if (this.log_packets_opt) this.log("[SENT]: " + data);
this.game_socket.Send(game_data);
}
它运行函数,但似乎在该void的底线处遇到错误。Form2不能运行sendGameData,因为它没有"game_socket"公共套接字。这是一个巨大的问题,因为它阻止了我的代码工作。game_socket在任何大的事情发生之前被分配到Form1,我不想重建它,因为这会重叠socket,让你不得不重新连接和东西。
我想知道如何使Form2完全访问Form1,并拥有已经设置的所有公共变量。
哦,我收到的错误是:对象引用未设置为对象的实例。
您正在Form2中创建Form1的新实例,而不是将Form1的实例传递给Form2。这样做:
private void cpanel_btn_Click(object sender, EventArgs e)
{
Form2 cPanel = new Form2(this);
cPanel.Show();
}
namespace WindowsFormsApplication2
{
public partial class Form2 : Form
{
public Form1 Main;
public Form2(Form1 main)
{
this.FormBorderStyle = FormBorderStyle.FixedSingle;
InitializeComponent();
this.Main = main;
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
this.Main.sendGameData("Hello world!");
}
}
}