如何从 class C# 访问表单的控件
How to get access to form's controls from class C#
我在尝试从另一个 class 访问表单控件时遇到问题。我的程序挂在无限循环中。我知道为什么,但我不知道怎么写才正确。
这是 Form1.cs(我的表格)
public Form1()
{
InitializeComponent();
Load config = new Load();
string[] data = config.readConfig("config.ini");
if (data.Length == 4) { //client
Client run = new Client();
run.startClient(data[1], Convert.ToInt32(data[2]));
}
else if (data.Length == 3) //server
{
Server run = new Server();
run.startServer(Convert.ToInt32(data[1]));
}
}
public void addLog(string dataLog){
richTextBox1.Text += dataLog;
}
这里是 Client.cs 文件:
class Client
{
public void startClient(string ipAddr, int port)
{
Form1 form1 = new Form1();
TcpClient client = new TcpClient();
try
{
form1.addLog("Connecting...");
client.Connect(ipAddr, port);
form1.addLog("Connected to server: " + ipAddr + ":" + port.ToString());
}
catch
{
MessageBox.Show("We couldn't connect to server");
}
}
}
如何在没有每次新表单时 运行 的情况下更改文本值。也许有类似 run_once?
的东西
无限循环在这里:
表格 1:
//Always runs if the config file is a certain length
Client run = new Client();
客户:
Form1 form1 = new Form1();
每个构造函数创建另一个对象,后者又创建第一个对象,无限循环。
如果您需要向客户端获取表单对象请不要创建新对象!。它无论如何都不起作用,因为您的新表单对象对旧表单对象 一无所知。只需传入:
public Client(Form1 form)
{
//Do whatever with it
}
//Form class
Client c = new Client(this);
免责声明:通常有更好的方法来做到这一点,但是随着您对设计的熟悉程度的提高,您会学到这些方法 patterns/architecture。
我在尝试从另一个 class 访问表单控件时遇到问题。我的程序挂在无限循环中。我知道为什么,但我不知道怎么写才正确。
这是 Form1.cs(我的表格)
public Form1()
{
InitializeComponent();
Load config = new Load();
string[] data = config.readConfig("config.ini");
if (data.Length == 4) { //client
Client run = new Client();
run.startClient(data[1], Convert.ToInt32(data[2]));
}
else if (data.Length == 3) //server
{
Server run = new Server();
run.startServer(Convert.ToInt32(data[1]));
}
}
public void addLog(string dataLog){
richTextBox1.Text += dataLog;
}
这里是 Client.cs 文件:
class Client
{
public void startClient(string ipAddr, int port)
{
Form1 form1 = new Form1();
TcpClient client = new TcpClient();
try
{
form1.addLog("Connecting...");
client.Connect(ipAddr, port);
form1.addLog("Connected to server: " + ipAddr + ":" + port.ToString());
}
catch
{
MessageBox.Show("We couldn't connect to server");
}
}
}
如何在没有每次新表单时 运行 的情况下更改文本值。也许有类似 run_once?
的东西无限循环在这里:
表格 1:
//Always runs if the config file is a certain length
Client run = new Client();
客户:
Form1 form1 = new Form1();
每个构造函数创建另一个对象,后者又创建第一个对象,无限循环。
如果您需要向客户端获取表单对象请不要创建新对象!。它无论如何都不起作用,因为您的新表单对象对旧表单对象 一无所知。只需传入:
public Client(Form1 form)
{
//Do whatever with it
}
//Form class
Client c = new Client(this);
免责声明:通常有更好的方法来做到这一点,但是随着您对设计的熟悉程度的提高,您会学到这些方法 patterns/architecture。