Как нажимать кнопку из другой формы с помощью С#?

Вопрос: У меня есть 2 формы: Form1, которые делают снимок экрана. Form2, которые имеют 2 кнопки для управления скриншотом, созданным формой1. Form1 также имеет скрытую кнопку, содержащую метод сохранения снимка экрана. Мои вопросы: Как я могу нажать кнопку form1 из формы2? и как я могу проверить, когда форма 1 закрыта, а затем закрыть форму2? Я

Вопрос:

У меня есть 2 формы:

  1. Form1, которые делают снимок экрана.
  2. Form2, которые имеют 2 кнопки для управления скриншотом, созданным формой1.

Form1 также имеет скрытую кнопку, содержащую метод сохранения снимка экрана.

Мои вопросы:

Как я могу нажать кнопку form1 из формы2? и как я могу проверить, когда форма 1 закрыта, а затем закрыть форму2?

Я пробовал что-то вроде этого, но ничего не происходит, когда я нажимаю кнопку сохранения формы2:

var form = Form.ActiveForm as Form1; if (form != null) { form.button1.PerformClick(); } Лучший ответ:

Прежде всего, обычный способ работы с несколькими формами состоит в том, что при закрытии формы автозагрузки также закрываются вторичные формы. Если вы создаете Form2 в Form1 я бы показал его, используя (your second Forms Instance).Show(this). Затем вы можете получить доступ к форме Form2 Parent Property. т.е.

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(); } } Ответ №1

Вместо создания скрытой кнопки просто создайте метод, не связанный с кнопкой.

В Form1.cs:

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

В Form2.cs:

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

Также убедитесь, что метод SaveScreenshot как public или internal.

Я изменил код, который получает Form1. Если вы нажмете кнопку на Form2 то Form2 будет ActiveForm, поэтому ваш код никогда не “увидит” Form1. Я использовал методы LINQ в своем коде, который будет работать только в том случае, если у вас есть using System.Linq; в верхней части вашего кода.

Оцените статью
Добавить комментарий