我需要制作一个带名字的记分牌。
在第一张表格中,您可以通过用户控件添加玩家。
Button1_click将UserControl1添加到面板中。 UserControl1只有一个文本框,标签和一个按钮,当插入文本并按下按钮(在UserControl1内)时,文本被传输到标签中,按钮和文本框被丢弃。
现在,当用户完成添加足够的玩家后,他按下第二个按钮,这将打开第二个表单,一个面板。
现在这个面板需要第二个userControl,因为只有一个标签。 (这必须是userControl,因为以后我会添加分数) 所以现在,程序必须读取,用户在Form1中添加的所有名称都将它们添加到userControl2标签中,并将该userControl添加到Form2的面板中
我希望这是有道理的。
这是我到目前为止所做的:
Form1代码
public List<PlayerAdder> PlayerList { get; set; } = new List<PlayerAdder>();
private void B_AddPlayer_Click(object sender, EventArgs e)
{
count++;
PlayerAdder PA = new PlayerAdder();
PlayerList.Add(PA);
for (int J = 0; J < count; J++)
{
GBX_Title.Text = "Mängijate Arv: " + count;
flowLayoutPanel1.Controls.Add(PA);
}
}
正如你所看到的,我已经制作了一个列表,它应该存储名称。
我还有一个包含以下内容的CodeFile:
public class MyData
{
public List<Players> Players { get; set; }
}
public class Players
{
public string PlayerName { get; set; }
}
应该将名称发送到列表的第一个UserControl:
public string PlayerName
{
get { return NameInput.Text; }
set { NameInput.Text = value; }
}
Form2将拥有此代码:
private void PlayerNames()
{
for (int i = 0; i < gameInfo.Players.Count; i++)
{
ScoreboardMenuControl SMC = new ScoreboardMenuControl();
flowlayoutpanel.Controls.Add(SMC);
}
}
和最后一个ScoreboardMenuControl我还没有想出任何东西.. 这很难消化,但希望你理解。 这是我想要做的视觉
From1 - &gt; UserControl1 - &gt;数据
Form1 - &gt; Form2 - &gt;面板 - &gt; UserControl2 - &gt;数据
答案 0 :(得分:1)
因此,您应该将您的数据从Form1.UserControl1传递给Form2.UserControl2。我建议你通过Form2构造函数这样做:
public Form2(MyData data)
{
this.InitializeComponent();
this.userControl2.Data = data;
}
然后在Form1中你可以这样做:
var form2 = new Form2(this.userControl11.Data);
然而,这将使Form2紧密耦合到Form1。为避免这种情况,您可以通过这样的接口传递数据。首先,像这样创建IMyData接口:
public interface IMyData
{
List<Player> Players { get; set; }
}
然后你的MyData类应该实现这个接口。然后在Form2构造函数中等待IMyData接口,而不是像这样的具体实现:
public Form2(IMyData data)
{
this.InitializeComponent();
this.userControl2.Data = data;
}
这将在以后测试您的项目以模拟MyData时帮助您。