gpt4 book ai didi

C# 如何从另一个表单更改标签文本

转载 作者:行者123 更新时间:2023-11-30 20:46:19 25 4
gpt4 key购买 nike

所以我有 2 个表格。

表格 1 是我的主要表格,表格 2 是我在文本框中输入文本以显示在表格 1 上的标签上的地方。此外,用于“确认”并实际更改标签输入文本的按钮位于表格上2 需要保持这种状态。

出于某种原因,这不起作用。

Form 2 有一个文本框和一个按钮,当我按下按钮时,它会更改指定字符串的字符串值。
此字符串链接到表单 1 上的标签。字符串正在更改,因此这不是问题我通过添加一个按钮来确认这一点,该按钮会弹出一个显示新字符串值的消息框。

在寻找答案时发现这一定是某种令人耳目一新的问题,我尝试了很多方法都没有成功。只有那些将我的按钮放在表单 1 而不是表单 2 上的方法才有效。

我已经连续 3 个小时在谷歌上搜索如何解决这个问题,但要么这些方法不起作用,要么他们将我的按钮从表单 2 更改为我的主表单(表单 1)。

请不要说我懒惰,我真的找不到有效的方法!

编辑:

代码

GameScreen.cs

namespace _2pGame
{
public partial class GameScreen : Form
{
public GameScreen()
{
InitializeComponent();

P1NameLabel.Text = gm.P1Name;
P1ClassLabel.Text = gm.P1Class;
P2NameLabel.Text = gm.P2Name;
P2ClassLabel.Text = gm.P2Class;
}

private void PlayerInfoButton_Click(object sender, EventArgs e)
{
PlayerInfo playerinfoload = new PlayerInfo();
playerinfoload.Show();
}
}

玩家信息.cs

namespace _2pGame 
{
public partial class PlayerInfo : Form
{
public PlayerInfo()
{
InitializeComponent();
}

public void ConfirmPlayerInfo_Click(object sender, EventArgs e)
{
gm.P1Class = P1ClassChoice.Text;
gm.P1Name = P1TextBox.Text;
gm.P2Class = P2ClassChoice.Text;
gm.P2Name = P2TextBox.Text;
}
}
}

引用文献

namespace _2pGame
{
public partial class gm
{
public static string
P1Class,
P2Class,
P1Name,
P2Name;
}
}

最佳答案

解决这种众所周知的情况的方法是通过委托(delegate)....

在您的 PlayerInfo 表单中声明

public partial class PlayerInfo : Form 
{
// define the delegate type (a parameterless method that returns nothing)
public delegate void OnConfirmPlayer();

// declare a public variable of that delegate type
public OnConfirmPlayer PlayerConfirmed;

.....

public void ConfirmPlayerInfo_Click(object sender, EventArgs e)
{
gm.P1Class = P1ClassChoice.Text;
gm.P1Name = P1TextBox.Text;
gm.P2Class = P2ClassChoice.Text;
gm.P2Name = P2TextBox.Text;

// Check is someone is interested to be informed of this change
// If someone assign a value to the public delegate variable then
// you have to call that method to let the subscriber know
if (PlayerConfirmed != null)
PlayerConfirmed();
}
}

然后在您的 GameScreen 表单中,就在显示 PlayerInfo 表单之前,将公共(public) PlayerInfo.PlayerConfirmed 设置为 GameScreen 表单类中的一个方法

private void PlayerInfoButton_Click(object sender, EventArgs e)
{
PlayerInfo playerinfoload = new PlayerInfo();

// Subscribe to the notification from PlayerInfo instance
playerinfoload.PlayerConfirmed += PlayerHasBeenConfirmed;

playerinfoload.Show();
}

// Method that receives the notification from PlayerInfo
private void PlayerHasBeenConfirmed()
{
P1NameLabel.Text = gm.P1Name;
P1ClassLabel.Text = gm.P1Class;
P2NameLabel.Text = gm.P2Name;
P2ClassLabel.Text = gm.P2Class;
}

这种方法的优点是可以避免 GameScreen 和 PlayerInfo 之间的耦合。无需知道 PlayerInfo 内部是否存在 GameScreen 表单及其属性名称。您只需发布一个委托(delegate),订阅者可以注册该委托(delegate)以了解更改并让订阅者根据自己的代码执行操作。

关于C# 如何从另一个表单更改标签文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27179647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com