单击一个表单上的按钮,同时单击其他表单

时间:2014-04-29 05:13:32

标签: c# winforms

我有两个程序,都在不同的名称空间中,彼此独立运行。如果通过单击另一个表单上的按钮执行按钮,我想在一个表单上调用按钮的单击事件。

我能够在VB中通过制作表单public,在表单2中引用 dll 并从namespace.form1.button_click调用点击来完成此操作但无法正常工作如何在C#中做到这一点。

2 个答案:

答案 0 :(得分:0)

首先将form2承包商的访问修饰符更改为private,将button_click方法更改为public。

然后将此代码添加到Form2类:

    private static Form2 _Instance;
    public static Form2 Instance
    {
        get
        {
            if (_Instance == null)
                _Instance = new Form2();

            return _Instance;
        }
    }

现在你可以从form1中的button_click中调用form2中的buuton_click,如下所示:

    private void button1_Click(object sender, EventArgs e)
    {
        Form2.Instance.button1_Click(this, EventArgs.Empty);
    }

答案 1 :(得分:0)

您需要将form2对象的引用(通过单击按钮在ArcGIS应用程序中启动它)传递给form1对象。

如果form2是一个单独的加载项(由第三方提供)并且不公开任何API函数,那么我认为很难实现你想要的。如果您已创建此加载项,则可以公开一个函数,以便其他应用程序可以调用此加载项上的按钮单击。

此外,两个加载项之间的通信模式还取决于加载项在ArcGIS应用程序中的加载方式(进程内或进程外)。根据这个,你可以直接调用另一个函数,或者你可能需要通过远程处理,RPC等等。

以上回复基于我对如何调用另一个加载项的按钮单击的理解,可能与此特定情况无关。请提供有关环境的更多详细信息,创建加载项的人员等

编辑:在OP的评论后添加以下内容

由于您拥有两个项目的代码并且可以更新它们,这很好,我们可以做任何我们想做的事情

在将form2对象的引用传递给form1之后,form1将只能访问System.Windows.Forms.Form的所有方法(即使你在form2中使button_click为public,也无法访问)

创建一个新项目,它将作为基础(prjBase)并包含一个接口IOutsideCallable

interface IOutsideCallable {
     void PerformButtonClick();
}

现在,在form1和form2的项目中添加对上述项目的引用 在form2

中实现上述接口
class Form2: System.Windows.Forms.Form, IOutsideCallable {
    // other form code

    public void PerformButtonClick() {
        btn_Click(null, null);
    }
}

在form1中,创建一个变量以指向IOutsideCallable类型的对象。您可以在form1的构造函数中或通过属性传递form2对象。 (正如您在评论中提到的,您不知道构造函数的传递顺序,您可以使用该属性)

所以,在form1

class Form1: System.Windows.Forms.Form {
    // form1 code

    public IOutsideCallable Form2Variable { get; set; }

    void foo() { // the function in which you will invoke the button click of Form2
        if(Form2Variable != null) Form2Variable.PerformButtonClick();
    }
}