没有错误,标签似乎应该更改为指示的文本,但事实并非如此
本文关键字:指示 文本 并非如此 事实 标签 有错误 | 更新日期: 2023-09-27 18:30:16
谁能告诉我为什么这什么都不做? 当StatTransfer()
被FighterButtonClick
调用时,pcNameLabel.Text
应该更改为鲍勃。根据调试器,一切正常。
我删除了一些额外的变量和与手头问题无关的东西。
public partial class MainForm : Form
{
public static string VariableLabel1;
public static string Variable2;
Random _r = new Random();
public MainForm()
{
InitializeComponent();
}
void CLoop()
{
while(true)
{
SetInfo();
}
}
public void SetInfo()
{
this.pcNameLabel.Text = VariableLabel1;
}
void ChClassButtClick(object sender, EventArgs e)
{
CharStats form = new CharStats();
form.Show();
}
}
这是一个单独的窗口窗体窗口。
public partial class CharStats : Form
{
public CharStats()
{
InitializeComponent();
}
void StatTransfer()
{
MainForm Mform = new MainForm();
MainForm.VariableLabel1 = "Bob";
Mform.SetInfo();
}
void FighterButtonClick(object sender, EventArgs e)
{
Fighter();
StatTransfer();
}
}
在这些行中
void StatTransfer()
{
// This is a new instance of MainForm, not the original one
MainForm Mform = new MainForm();
MainForm.VariableLabel1 = "Bob";
Mform.SetInfo();
}
您创建 MainForm 的新实例,并且永远不会显示此实例。此隐藏实例包含您尝试更改的标签,但您看不到它。
解决此问题的最简单方法是在初始化表单时将MainForm
的调用实例传递给表单CharStats
void ChClassButtClick(object sender, EventArgs e)
{
CharStats form = new CharStats(this);
form.Show();
}
现在,您应该更改 CharStats
的构造函数以接收传递的实例并将其保存在 CharStats 类内的全局变量中
public partial class CharStats : Form
{
private MainForm _callingForm;
public CharStats(MainForm callingForm)
{
InitializeComponent();
_callingForm = callingForm;
}
.....
并在您需要的地方使用此保存的实例
void StatTransfer()
{
_callingForm.VariableLabel1 = "Bob";
callingForm.SetInfo();
}
}
编辑 顺便说一下,你不需要使用静态变量来工作。只需更改方法 MainForm.SetInfo 即可接收字符串并在调用时传递 Bob
public void SetInfo(string newText)
{
this.pcNameLabel.Text = newText;
}
来自 CharStats
void StatTransfer()
{
callingForm.SetInfo("Bob");
}
MainForm
未设置为在任何地方显示。我相信您想像这样将其添加到您的CharStats
表单中:
void StatTransfer()
{
MainForm Mform = new MainForm();
MainForm.VariableLabel1 = "Bob";
Mform.SetInfo();
this.Controls.Add(Mform);
}