从另一个类调用按钮单击功能

时间:2019-01-10 14:04:01

标签: c# winforms

我目前有一个表单和一些用户控件,我在Form1-mainpanel中设置了一个面板,因此每当我单击一个按钮时,其中一个用户控件就会显示在mainPanel上。 / p>

我的问题是控件(InfoSetting)之一具有其他一些新按钮,当我单击它时,我希望mainPanel显示新的用户控件。但是,目前Form1中的所有其他按钮都可以正常工作,但是当我单击InfoSetting按钮时,似乎什么都没有显示。

这是我来自Form1的代码

public partial class Form1 : MetroFramework.Forms.MetroForm
{
    InfoSettings infoSetting;
    CashSales cashSales; 
    PriceSetting priceSetting; 
    public Form1()
    {
        InitializeComponent();
        infoSetting  = new InfoSettings();
        cashSales = new CashSales();
        priceSetting = new PriceSetting();
    }


    protected void ButtonClicked(object sender, EventArgs e)
    {

        buttonHandler(sender);
    }

    public void buttonHandler(object sender)
    {
        Button button = sender as Button;
        mainPanel.Controls.Clear();

        if (button != null)
        {
            switch (button.Name)
            {
                case "HomeBtn":
                    infoSetting.Dock = DockStyle.Fill;
                    mainPanel.Controls.Add(infoSetting);
                    break;

                case "cashSalesBtn":
                    cashSales.Dock = DockStyle.Fill;
                    mainPanel.Controls.Add(cashSales);
                    break;

                case "settingBtn":
                    infoSetting.Dock = DockStyle.Fill;
                    mainPanel.Controls.Add(infoSetting);
                    break;

                case "priceSettingBtn":
                    cashSales.Dock = DockStyle.Fill;
                    mainPanel.Controls.Add(cashSales);
                    break;

                default:
                    mainPanel.Controls.Clear();
                    break;
            }
        }
    }

这是InfoSetting用户控件中的代码

public partial class InfoSettings : UserControl
{


    public InfoSettings()
    {
        InitializeComponent();
    }

    private void priceSettingBtn_Click(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        form1.buttonHandler(sender);
    }
}

4 个答案:

答案 0 :(得分:2)

https://community.rsa.com/ideas/1423所述,您可以向父表单添加通话:

adapter = StatusAdapter()
recyclerViewStatusList.adapter = adapter

答案 1 :(得分:0)

最好有一个公共类,您可以使用窗体和用户控件来访问它,并在其中使用要在其中运行的代码。像这样:

    public class FormHelper
    {
        public void CodeIWantToRunIn2Places()
        {
           // Implementation Here
        }
    }

您可以将上述内容实现为单例,这样您就可以在两个地方进行访问。然后可以在表单类中执行以下操作:

    FormHelper.Instance.CodeIWantToRunIn2Places();

在事件处理程序以及用户控件中。

答案 2 :(得分:0)

您可以将Form 1设置为“静态”,也可以将方法 buttonHandler(对象发送方)设置为“静态”。

然后在 priceSettingBtn_Click 内部,直接调用以下函数

Form1.buttonHandler(sender);

答案 3 :(得分:0)

我将有一个全局对象,该对象带有指向应用程序中所有表单的指针。

public Global
{
     public Form1 MainForm;
     public Dialog1 D1;
...
}

public static Global = new Global();

在创建每个表单时输入

Global.MainForm = form1;

那你就可以去

private void priceSettingBtn_Click(object sender, EventArgs e)
{

    Global.MainForm.buttonHandler(sender);
}

正如其他人所说,最好不要调用单击处理程序,最好让此代码和真实的单击处理程序调用业务逻辑级别的函数