将数据从多个用户控件传递到表单

Passing data from multiple userControls to a form

我需要制作一个带有名字的记分牌。

在第一个表单中,您通过用户控件添加玩家。

Button1_click 将 UserControl1 添加到面板中。 UserControl1 只有一个文本框、标签和一个按钮,当插入文本并按下按钮(在 UserControl1 内)时,文本将转移到标签中,并处理按钮和文本框。

现在,当用户添加完足够的球员后,他按下第二个按钮,这将打开第二个表格,只有一个面板。

现在这个面板需要第二个用户控件,因为只有一个标签。 (这必须是一个用户控件,因为稍后我会添加分数) 所以现在,程序必须读取,用户在 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);
        }      
    }

如您所见,我制作了一个列表,其中应存储名称。

我还有一个代码文件,其中包含:

 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 -> UserControl1 -> 数据

Form1 -> Form2 -> 面板 -> UserControl2 -> 数据

所以您应该将数据从 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 class 应该实现这个接口。然后在 Form2 构造函数中等待 IMyData 接口而不是像这样的具体实现:

public Form2(IMyData data)
{
    this.InitializeComponent();
    this.userControl2.Data = data;
}

这也会在您稍后测试项目以模拟 MyData 时帮助您。