Проблема связана с тем, что dtgmb
помечен как статический. Это означает, что все экземпляры, независимо от срока их службы, будут иметь одинаковое значение.
Статические переменные инициализируются, когда приложение начинает использовать свои собственные значения по умолчанию (например, целые числа инициализируются в ноль, а логические значения равны false).
Если вы удалите статический модификатор, вам нужно будет вызвать метод stuff
со ссылкой на форму. Поскольку вы не указываете нам, где вы звоните, я публикую здесь рефакторинг того, что вы опубликовали.
Form1.cs
public bool dtgmb = false;
private void button1_Click(object sender, EventArgs e)
{
//Forms saved in class called FormsCollection
FormsCollection.Form1.Hide();
FormsCollection.Form2.Show();
}
private void button2_Click(object sender, EventArgs e)
{
FormsCollection.Form1.Hide();
dtgmb = true;
FormsCollection.Form2.Show();
}
и Form2.cs
public void stuff(Form1 form)
{
DataGridViewCheckBoxColumn check = new DataGridViewCheckBoxColumn();
DataGridViewCheckBoxColumn check1 = new DataGridViewCheckBoxColumn();
dataGridView4.ColumnCount = 1;
dataGridView4.Columns[0].Width = 380;
dataGridView4.Columns[0].Name = "Item";
string[] row1 = new string[] { "Tables" };
string[] row2 = new string[] { "Chairs" };
string[] row3 = new string[] { "Lamps" };
string[] row4 = new string[] { "Pillows" };
string[] row5 = new string[] { "Blankets" };
object[] rows = new object[] { row1, row2, row3, row4, row5 };
object[] rows1 = new object[] { row1, row2, row3, row4 };
if (form.dtgmb == false)
foreach (string[] rowArray in rows)
{
this.dataGridView4.Rows.Add(rowArray);
}
else
foreach (string[] rowArray in rows1)
{
this.dataGridView4.Rows.Add(rowArray);
}
check.HeaderText = "Pass";
check1.HeaderText = "Fail";
dataGridView4.Columns.Add(check);
dataGridView4.Columns.Add(check1);
}
Имейте в виду, что совместное использование полей напрямую не является хорошей практикой, но это хорошо, чтобы понять, в чем проблема.
РЕДАКТИРОВАТЬ после комментариев
Мне неясно, чего вы пытаетесь достичь. Ваш код не работает, когда вы пытаетесь передать тип в качестве формального аргумента функции. Я реорганизовал ваш код для компиляции (но я не понимаю, как он должен себя вести):
Program.cs
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
new Form1().Show();
Application.Run(new Form2());
}
Form1.cs
public partial class Form1 : Form
{
public bool dtgmb = false;
public Form1()
{
InitializeComponent();
FormCollection.Form1 = this;
}
private void button1_Click(object sender, EventArgs e)
{
//Forms saved in class called FormsCollection
FormCollection.Form1.Hide();
FormCollection.Form2.Show();
}
private void button2_Click(object sender, EventArgs e)
{
FormCollection.Form1.Hide();
dtgmb = true;
FormCollection.Form2.Show();
}
private void Form1_Click(object sender, EventArgs e)
{
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
FormCollection.Form1 = null;
}
}
public static class FormCollection
{
public static Form1 Form1;
public static Form2 Form2;
}
Form2.cs
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
FormCollection.Form2 = this;
}
private void Form2_Load(object sender, EventArgs e)
{
stuff(FormCollection.Form1);
}
public void stuff(Form1 form)
{
DataGridViewCheckBoxColumn check = new DataGridViewCheckBoxColumn();
DataGridViewCheckBoxColumn check1 = new DataGridViewCheckBoxColumn();
dataGridView4.ColumnCount = 1;
dataGridView4.Columns[0].Width = 380;
dataGridView4.Columns[0].Name = "Item";
string[] row1 = new string[] { "Tables" };
string[] row2 = new string[] { "Chairs" };
string[] row3 = new string[] { "Lamps" };
string[] row4 = new string[] { "Pillows" };
string[] row5 = new string[] { "Blankets" };
object[] rows = new object[] { row1, row2, row3, row4, row5 };
object[] rows1 = new object[] { row1, row2, row3, row4 };
if (form.dtgmb == false)
foreach (string[] rowArray in rows)
{
this.dataGridView4.Rows.Add(rowArray);
}
else
foreach (string[] rowArray in rows1)
{
this.dataGridView4.Rows.Add(rowArray);
}
check.HeaderText = "Pass";
check1.HeaderText = "Fail";
dataGridView4.Columns.Add(check);
dataGridView4.Columns.Add(check1);
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
FormCollection.Form2 = null;
}
}
Обратите внимание, что в приведенном выше коде есть несколько проблем: одна из них зависит от того, как инициализируются формы.