如何在C#中通过UserControl从窗体调用函数?

时间:2019-03-25 16:15:31

标签: c# user-controls

表单中,我有几个按钮(单选按钮),每个按钮都调用不同的 UserControl 。因此,它们会以如下形式动态添加到表单中:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void Something()
    {
         // Do something in the Form
         // Etc etc
    }

    private void Rb1_CheckedChanged(object sender, EventArgs e)
    {
        if (!PnContent.Controls.Contains(Uc1.Instance))
        {
            PnContent.Controls.Add(Uc1.Instance);
            Uc1.Instance.Dock = DockStyle.Fill;
            Uc1.Instance.BringToFront();
        }
        else
        {
            Uc1.Instance.BringToFront();
        }
    }

    private void Rb2_CheckedChanged(object sender, EventArgs e)
    {
        if (!PnContent.Controls.Contains(Uc2.Instance))
        {
            PnContent.Controls.Add(Uc2.Instance);
            Uc2.Instance.Dock = DockStyle.Fill;
            Uc2.Instance.BringToFront();
        }
        else
        {
            Uc2.Instance.BringToFront();
        }
    }
}

(注意:“ PnContent”只是表单中的面板)

现在在 UserControl(Uc1)中,我拥有以下功能:

public partial class Uc1 : UserControl
{
    public Uc1()
    {
        InitializeComponent();
    }

    private static Uc1 _instance;

    public static Uc1 Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new Uc1();
            }
            return _instance;
        }
    }

    // Etc etc

    private void Btn1_Click(object sender, EventArgs e)
    {
        // Do something in UserControl
        // Etc etc
    }

}

有问题。当触发 Usercontrol 中的 Btn1_Click 时,我需要从表单中调用公共无效 Something()。< / p>

这是我的代码的摘要。

UserControl 中的 Btn1 的实际操作是在数据库中保存一条记录。然后,在执行此操作之后,有必要重新加载记录列表。但是 Datagrid 位于 Form1 上,而方法 Something()可以加载所有数据

使用相同的想法解决此问题的任何技巧吗?

0 个答案:

没有答案