[英]Calling Form2's function from Form1 with Form1's public variables
因此,基本上,我的程序將您登錄到帶有套接字的游戲,並且一旦您登錄“控制面板”按鈕,便會出現修改游戲中某些內容的信息,例如在游戲中發送消息。 “控制面板”按鈕通過新表格顯示所有這些功能。 現在,我將為您提供打開Form2的Form1的代碼段。
private void cpanel_btn_Click(object sender, EventArgs e)
{
Form2 cPanel = new Form2();
cPanel.Show();
}
如您所見,它啟動了Form2。 我正在嘗試讓Form2與Form1通信。 基本上,Form2可以與Form1通信,只要運行簡單的void(函數)就可以了-但這僅此而已。 這是Form2的構造函數類。 我給它起了公共名稱“ Main”,並為其設置了“ public Form1 main;”。 在Form2類的頂部。 這是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!");
}
}
}
如您所見,此類底部的按鈕空白會嘗試與Form1通信並發送一些數據。 但是,它運行函數,但是讓我們看一下Form1的“ sendGameData”無效。
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);
}
它運行該函數,但似乎與該空隙的底線發生了錯誤。 Form2無法運行sendGameData,因為它沒有“ game_socket”公共套接字。 這是一個很大的問題,因為它使我的代碼無法正常工作。 在發生任何大的事情之前,將game_socket分配到Form1中,並且我不想重構它,因為那會與套接字重疊,從而使您不得不重新連接。
我想知道如何使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!");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.