如何从c#中的另一个类调用Button_Click?

时间:2017-08-25 09:53:27

标签: c# class button click

我有一个班级Class1

public partial class Class1 {
     public void Button1_Click(object sender, RibbonControlEventArgs e) 
     {
          //do something
     }
}

和第二课Class2

public partial class Class2 {
     //some Code
     //Call Button1_Click from Class1
     // some more code
}

如何在Class2中调用Class1的Button1_Click?

3 个答案:

答案 0 :(得分:1)

您可以通过构造函数将Class1传递给Class2,例如

class Class1
{
    Class2 c2 = new Class2(this);
}

class Class2
{
    Class1 C2;

    public Class2(Class1 _class1){
        C2 = _class1;
    }
}

然后按下按钮就可以了

public void PressClass1Button()
{
     C2.Button1_Click();
}

对不起,我没有检查实际的语法,因为我正在工作,但这是我通常用于此类问题的基本概念。

这是一个混乱/简单的解决方案,可能不是最好的!

希望它有所帮助。

答案 1 :(得分:0)

您需要委托它,启动将自动调用按钮的事件单击

示例:

private void delegate_You_Create(object sender, RibbonControlEventArgs args)
{
   Button1_Click(sender, args);
}

您可以阅读有关委托here

的内容

答案 2 :(得分:0)

按钮点击事件可以在按钮点击的锡柄上执行操作。附带的功能只是你说"我想在发生这种情况时这样做"。

例如

public void Button1_Click(object sender, RibbonControlEventArgs e) 
{
  // Do the stuff I want to do when Button1 is clicked
}

扩展此示例以使用完全相同的第二个按钮,您可以添加第二个单击事件并复制像这样的代码

public void Button2_Click(object sender, RibbonControlEventArgs e) 
{
  // Do the stuff I want to do when Button1 is clicked
}

但是,更好的方法是避免重复,将按钮填充到方法中然后执行此操作

public void Button1_Click(object sender, RibbonControlEventArgs e) 
{
  DoButtonStuff();
}

public void Button2_Click(object sender, RibbonControlEventArgs e) 
{
  DoButtonStuff();
}

private void DoButtonStuff()
{
    // Do the stuff I want to do when my buttons are clicked
}

进一步扩展这一点,您可以公开DoButtonStuff并从其他地方调用它,就像使用任何其他方法一样。

这种做法更好,因为您可以捕捉您感兴趣的内容 - DoButtonStuff - 而不是导致它发生的事情 - 按钮点击。

编辑 - 回答您的静态问题。

您有几个选择 -

你可以让DoButtonStuff静态然后做这样的事情

// Class1
static void DoButtonStuff() { ... }

// Class2
Class1.DoButtonStuff();

你可以让DoButtonStuff公开然后在Class2中实例化Class1然后做这样的事情

// Class1
public void DoButtonStuff() { ... }

// Class2
Class1 myClass1 = new Class1();

myClass1.DoButtonStuff();

你可以将DoButtonStuff拉出到一个单独的类中并从那里调用它

// MethodClass
public void DoButtonStuff() { ... }

// Class1
MethodClass myMethodClass = new MethodClass();
myMethodClass.DoButtonStuff();

你可以在Class2中做同样的事。

第一个选项可能是最简单的,可能是最适合你的。

第二种选择很少是一个好主意,因为它以几乎肯定不应该的方式将你的两个班级联系起来。

对于更复杂的问题,第三种选择可能是最好的,特别是如果DoButtonStuff没有涉及更新UI - 例如保存操作。