Так я этот класс называется Common.cs в этом классе у меня есть функция, которая создает экземпляр формы, frmMainGame.cs, который затем вызывает метод, должен ссылаться на этот новый экземпляр формы, но по какой-то причине он этого не делает. Поэтому, когда форма отображается с использованием mainGame.Show(); форма просто висит там, и я ничего не могу с этим поделать.Form.Show() вешает новую форму экземпляра
Вот код:
frmMainGame.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
namespace Ghoul_Engine
{
public partial class frmMainGame : Form
{
public delegate void openGame();
public delegate void refreshGame();
public delegate void updateScreen(Bitmap image);
drawing draw;
public bool isTyping = false;
public Graphics g;
public List<String> Chat = new List<String>();
public List<String> chat
{
get { return Chat; }
}
public frmMainGame()
{
draw = new drawing(this);
InitializeComponent();
}
public Size size{
get { return this.Size; }
}
public void showGame()
{
if (InvokeRequired)
{
MessageBox.Show("Invoke");
BeginInvoke(new openGame(showGame), null);
}
else
{
this.Show();
this.Focus();
}
}
public void refresh()
{
if (this.InvokeRequired)
{
this.Invoke(new refreshGame(refresh), null);
}
else
{
this.Refresh();
}
}
private void frmMainGame_Load(object sender, EventArgs e)
{
this.DoubleBuffered = true;
draw.drawText(new string[] { "GHOUL Game Engine Alpha V0.0.1" }, 12, 0, 0, Brushes.Yellow);
clientNetHandler handlers = new clientNetHandler();
}
public void update(Bitmap image)
{
if (InvokeRequired)
{
this.Invoke(new updateScreen(update), new object[] { image });
}
else
{
pbScreen.Image = image;
}
}
private void frmMainGame_Close(object sender, FormClosingEventArgs e)
{
Program.Network.Send("logout", Program.netHandlers.getDataByte(clientNetHandler.cNetType.Logout));
//Program.Network.closeSocket();
Program.mainMenu.showMainMenu();
Program.mainGame = new frmMainGame();
}
private void tmrRefreshScreen_Tick(object sender, EventArgs e)
{
}
private void frmMainGame_KeyPress(object sender, KeyPressEventArgs e)
{
}
private void pbScreen_Click(object sender, EventArgs e)
{
draw.drawText(Chat.ToArray(), 12, 0, 30, Brushes.Green);
}
}
}
Common.Cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Drawing;
namespace Ghoul_Engine
{
class Common
{
public Common()
{
}
public void innnitiateGame(String login)
{
Program.mainMenu.hideMainMenu();
frmMainGame mainGame = new frmMainGame();
mainGame.showGame();
}
public void preExit()
{
Program.Network.closeSocket();
}
}
}
Если я это сделаю, то я не могу получить доступ к классу сети, созданному в программе. Он ждет, пока frmMainGame не закроется, прежде чем запускать что-либо в классе. –
Я согласен с @dotNET, вам нужно реструктурировать то, как у вас есть вещи. Application.Run() не является обязательным, если у вас есть формы. Если ваше сообщение не работает до тех пор, пока основная форма не будет закрыта, вы делаете что-то действительно нетрадиционное, и нам нужно будет больше деталей, чтобы понять это ... –
@ DylanDodds запускает сетевой код в другом потоке перед вызовом 'Application. Run' –