如何通过主窗体上的按钮从UserControl调用函数C#

时间:2019-08-22 10:42:02

标签: c#

我有一个带有用户控件的主窗体,当按下用户控件上的面板时,将显示图像。我想在主窗体上创建一个按钮,当我按下它时,之前出现的图像再次隐藏(就像用户控件第一次初始化时一样)

我已经在用户控件中创建了一个类(这是项目的一部分),并且在其中创建了一个函数来隐藏图像(如果它们已经出现)。 以下代码没有显示错误,但是没有用。 你能帮我吗?

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

        private void button_reset_Click(object sender, EventArgs e)
        {
            UserControl_axi user_ax = new UserControl_axi();
            UserControl_axi.Rst_userControl.Rst_Axi(user_ax);
public class Rst_userControl 
        {
            public static void Rst_Axi(UserControl_axi rst)
            {
                rst.pictureBox5.Hide();
                rst.pictureBox6.Hide();
           }
        }

1 个答案:

答案 0 :(得分:0)

起初,我觉得有些奇怪:为什么要在按钮操作中创建另一个用户控件?加载表单时,您可能不会看到该表单,因为该表单是在您的方法中创建的,然后在表单完成后将其删除。
您的表单中必须有另一个UserControl_axi变量/实例,这是您必须在Rst_Axi方法中用作参数的变量/实例

private void button_reset_Click(object sender, EventArgs e)
{
    // New user control user_ax ???? -> To be removed
    UserControl_axi user_ax = new UserControl_axi();
    // Changes applied to an "invisible" user_ax -> Argument to be replaced with the property of your Form of type UserControl_axi
    UserControl_axi.Rst_userControl.Rst_Axi(user_ax);
    // After this user_ax will be destroyed
}

此外,如果您的Rst_userControl类除了声明Rst_Axi方法外没有其他用途,建议您删除它并直接将Rst_Axi()声明为UserControl_axi的方法。因为您的做法太过激了:)

public partial class UserControl_axi
{
    // Not static anymore 
    public void Rst_Axi()
    {
         // No arguments because pictureBox5 and pictureBox6 are properties of the current usercontrol
         this.pictureBox5.Hide();
         this.pictureBox6.Hide();
    }
}

然后致电

private void button_reset_Click(object sender, EventArgs e)
{
     // Use the property in your form related to the UserControl_axi and call its reset method
     this.userControl_axio1.Rst_Axi();
}