【问题标题】:How to press a button from another form using C#?如何使用 C# 从另一个表单中按下按钮?
【发布时间】:2014-03-06 04:48:45
【问题描述】:

我有两种形式:

  1. 制作屏幕截图的 Form1。
  2. Form2 有 2 个按钮来操作由 form1 创建的屏幕截图。

Form1 还有一个“隐藏”按钮,其中包含保存屏幕截图的方法。

我的问题:

如何从 form2 中单击 form1 的按钮? 和 如何检查 form1 何时关闭,然后也关闭 form2?

我已经尝试过这样的事情,但是当我点击 form2 保存按钮时没有任何反应:

var form = Form.ActiveForm as Form1;
if (form != null)
{
    form.button1.PerformClick();
}

【问题讨论】:

    标签: c# forms button


    【解决方案1】:

    首先,多个表单的正常工作方式是,当您关闭启动表单时,辅助表单也会关闭。如果您在Form1 中创建Form2,我会使用(your second Forms Instance).Show(this) 来展示它。然后,您可以通过 Form2 的父属性访问表单。即

          var form = (Form1)this.Owner();
    

    然后您应该能够访问Form1 的所有公共方法,另外我会将您用于保存屏幕截图的代码放入公共方法中,无需在按钮单击中使用事件,尤其是在按钮被隐藏时。

    这是一个简单的例子:

    Form1

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
    
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm = new Form2();
            frm.Show(this);
        }
    
    }
    

    Form2

    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            var frm = (Form1)this.Owner;
            if (frm != null)
                frm.button1.PerformClick();
        }
    }
    

    【讨论】:

    • 我需要使用那个隐藏的按钮。我会试试你的方法,我会回来的。
    • ->对象引用未设置为对象的实例。 var form = (Form1)this.Parent; form.button1.PerformClick();
    • 你是如何创建form2的。你需要在那个时候分配父母。
    • 我的错,请改用Var frm = (Form1)this.Owner;。我将发布一个更新的代码示例
    • 工作。谢谢@Mark Hall
    【解决方案2】:

    不要制作隐藏按钮,只需制作一个未链接到按钮的方法。

    Form1.cs:

    public void SaveScreenshot()
    {
        //TODO: Save the Screenshot
    }
    

    Form2.cs:

    Form1 form = Application.OpenForms.OfType<Form1>().FirstOrDefault();
    if (form != null) {
        form.SaveScreenshot();
    }
    

    还要确保将SaveScreenshot 方法声明为publicinternal

    我更改了获取Form1 的代码。如果您单击Form2 上的按钮,那么Form2 将是ActiveForm,因此您的代码将永远不会“看到”Form1。我在代码中使用了 LINQ 方法,只有在代码顶部有 using System.Linq; 时才能使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多