C# 如何让usercontrol将值从它启动的表单传递到另一个表单?

C# 如何让usercontrol将值从它启动的表单传递到另一个表单?,c#,winforms,C#,Winforms,我正在创建这个简单的视频游戏订购应用程序。我已经创建了一个名为productControl的userControl。代码: public partial class productControl : UserControl { private string pName; private float pPrice; private string pDesc; private string pImgUrl; public productControl() =

我正在创建这个简单的视频游戏订购应用程序。我已经创建了一个名为productControl的userControl。代码:

public partial class productControl : UserControl
{
    private string pName;
    private float pPrice;
    private string pDesc;
    private string pImgUrl;

    public productControl() => InitializeComponent();

    public string getName
    {
        get => pName;
        set
        {
            pName = value;
            productName.Text = pName;
        }
    }

    public float getPrice
    {
        get => pPrice;
        set
        {
            pPrice = value;
            productPrice.Text = pPrice.ToString("c");
        }
    }

    public string getDescription
    {
        get => pDesc;
        set
        {
            pDesc = value;
            descriptionText.Text = pDesc;
        }
    }

    public string getImage
    {
        get => pImgUrl;
        set
        {
            pImgUrl = value;
            prodImage.Load(pImgUrl);
            prodImage.SizeMode = PictureBoxSizeMode.StretchImage;
        }
    }

    public int getProdId { get; set; }

    private void buyButton_Click(object sender, EventArgs e)
    {
        MessageBox.Show(pPrice.ToString("c"));
        orderConfirmation o = new orderConfirmation();
        o.Show();
    }
}
和一个名为accountMain的Windows窗体。它从SQL检索数据并调用productControl来填充数据

private string productRetriever = "SELECT prodId, prodName, prodPrice, prodImg, prodDesc FROM [dbo].[products]";

private void accountMain_Load(object sender, EventArgs e)
{
        createFunctions();
}
private void createFunctions()
{
    connection.Open();
    SqlCommand retProduct = new SqlCommand(productRetriever, connection);
    panel1.Controls.Clear()

    using (var reader = retProduct.ExecuteReader())
    {
        int count = 0;
        while(reader.Read())
        {
            p[count] = new productControl();
            p[count].Name = count.ToString();
            p[count].getProdId = (int)reader[0];
            p[count].getName   = (string)reader[1];
            p[count].getPrice  = (float)reader[2];
            p[count].getImage  = (string)reader[3];
            p[count].getDescription = (string)reader[4];
            panel1.Controls.Add(p[count]);
            count++;
        }
    }
    connection.Close();
}
在上面,我使用while循环在accountMain表单内使用productControl填充panel1。当我单击userControl中的“Buy”按钮时,如何让userControl隐藏accountForm并显示另一个表单(将值传递到新表单,如标题和价格)


此外,我还不熟悉如何将SQL实现到C中#使用executeReader()在accountMain中填充panel1是正确的方法还是有更好的方法从SQL中检索数据并在userControl中显示?

您需要使用form类的实例。请看我的两个表单项目:像UserControl这样的小兵永远不会要求主窗口的外观。提出一个事件,大狗可以响应它。你为什么用小写的p来命名?另外,请不要用“get”来命名您的属性。
getFoo=“foo”
有什么意义吗?不,没有
Foo=“Foo”
更有意义
getFoo
听起来更像一个函数或方法,而不是一个变量,它会像我做
getFoo()
一样不断地把我甩在脑后,我会出错。这是WinForms、ASP.NET WebForms还是WPF?