Объясните пожалуйста как мне это исправить.
Вот как я обратился с 2 формы в первую
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace PipenoMakazela
{
public partial class Form2 : Form
{
Form1 mainForm;
public Form2(Form1 ff)
{
InitializeComponent();
this.mainForm = ff;
}
int a=30;
private void timer1_Tick(object sender, EventArgs e)
{
a = a-1;
label2.Text = Convert.ToString(a);
if (a <= 0)
{
timer1.Enabled = false;
this.Close();
mainForm.button9.Enabled = true;
}
}
}
}
Но теперь на Form1 не получается открыть Form2 этим кодом.
Form2 frm = new Form2();- Выделяется как ошибка
private void button9_Click(object sender, EventArgs e)
{
frm.Show();
button9.Enabled = false;
}
а если на 2 форме удалить этот код
Form1 mainForm;
public Form2(Form1 ff)
{
InitializeComponent();
this.mainForm = ff;
}
то этот код работает
Form2 frm = new Form2();
private void button9_Click(object sender, EventArgs e)
{
frm.Show();
button9.Enabled = false;
}
PS Вот что пишет в Error list:
PipenoMakazela.Form2' does not contain a constructor that takes 0 arguments
1. Для отрывков кода используй тег code.
2. Не забывай про форматирование - Edit->Advanced->Format document
3. Посмотри в конструктор - ты в него должен передать экземпляр Form1. Что, в принципе, не требуется.
У тебя уже есть поле mainform. Нет никакой надобности в конструкторе Form2 инициализировать это значение. Сделай так:
Поле mainform сделай публичным и статическим. После этого, инициализируй поле Form2.mainform из конструктора Form1:
Код:
Form1()
{
Form2.mainform = this;
}
А ещё лучше - перенести это поле в Form1 и назови singleton. После этого, убери параметры в конструкторе Form2.