【问题标题】:Calling a button from form2 when clicking a button from form1单击 form1 中的按钮时从 form2 中调用按钮
【发布时间】:2019-10-29 10:32:28
【问题描述】:

这是一个演示示例,我不能使用原始代码。这个上下文非常简单。 当我单击母窗体 (form1) 中的按钮时,我想从子窗体 (form2) 中调用按钮/事件。我想通过订阅来做到这一点(我不太了解,因为我是编码新手)。

母形态:

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            f.Show();
            //Call the Button from Form2 here
        }


    }

子表格:

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

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("MessageBox called from Form1 or Form2");
        }
    }

【问题讨论】:

  • @Fabio ...嗯,这是个好建议 ...f.button1.PerformClick()button1 上使用正确的访问修饰符将解决他的 EXACT 问题(他在问题)...
  • @Selvin 并产生新问题,尤其是当您或其他人需要维护 form2 并且想知道 form1 正在崩溃时。
  • @Selvin,是的,您可以通过建议在注入的 textbox.Text 值周围添加缺少的单引号来解决 Sql 语法错误的确切问题,或者您可以建议使用 SqlParameters
  • 嗯,这是关于显示消息框而不是 sql,问题是 单击 form1 中的按钮时从 form2 中调用按钮

标签: c# .net windows forms


【解决方案1】:

你想做什么,你想做的方式,通常不是一个好主意,因为你不应该依赖另一个表单上的 UI 控件。

在不重写任何东西的情况下,你可以做些什么来实现你所要求的更像是这样的:

1)在Form2的按钮点击中,除了调用Form2上的方法,不做任何事情,事件处理程序不包含其他逻辑

2) 你把 form2 的方法公开

3) 从你的按钮点击 form1,你调用 form2 的相同公共方法

同样,这会起作用,但它不一定是最好的设计,它真的取决于你的应用程序的整个架构,它是否适合其余部分,或者有更好和不同的方法来实现这一点。

【讨论】:

    【解决方案2】:

    不要将其他形式称为“按钮点击”,如果你想从不同的地方调用一些逻辑,请将逻辑提取到专用类中并从两个地方调用它

    public class MyLogic
    {
        public void Execute(string someParameter)
        {
            // Do something with parameter
        }
    }
    

    然后以两种形式使用它

    public partial class Form1 : Form
    {
        private readonly MyLogic _importantLogic;
    
        public Form1()
        {
            InitializeComponent();
            _importantLogic = new MyLogic();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            _importantLogic.Execute(this.textBox1.Text);
        }
    }
    
    public partial class Form2 : Form
    {
        private readonly MyLogic _importantLogic;
        public Form2()
        {
            InitializeComponent();
            _importantLogic = new MyLogic();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            _importantLogic.Execute("Always Form 2");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多