#c#
#c#
Вопрос:
У меня есть 9 кнопок, Form1.Designer.cs
и я хочу получить к ним доступ в другом классе, Puzzle.cs
потому что позже мне нужно изменить изменения кнопок в классе модели. Приведенный ниже код — это то, что я пытался.
private Button[,] buttons = new Button[3, 3]
{ { Form1.button1, Form1.button2, Form1.button3 },
{ Form1.button4, Form1.button5, Form1.button6 },
{ Form1.button7, Form1.button8, Form1.button9 } };
Это не удается, поскольку модификатор для кнопок не является статическим. Я изменил их на статический тип, но это вызывает ошибки для кнопок.
Кто-нибудь может дать несколько советов?
Ответ №1:
Вам нужна ссылка на экземпляр Form1
класса. Если бы он был вызван form
, вы могли бы получить доступ к кнопке, подобной form.button1
.
Но я не уверен, что доступ к кнопкам формы из другого класса является хорошим дизайном.
Ответ №2:
Для правильной компиляции вам необходимо внести следующие изменения:
public partial class Puzzle : Form
{
private Button[,] buttons;
public Puzzle(Form1 form1)
{
buttons = new Button[,]
{
{ form1.Button1, form1.Button2, form1.Button3, },
{ form1.Button4, form1.Button5, form1.Button6, },
{ form1.Button7, form1.Button8, form1.Button9, },
}
};
}
Идея здесь в том, что Form1 — это класс, а не экземпляр класса… Класс подобен чертежу дома, а дом подобен экземпляру этого чертежа.
Чтобы вынести мебель из дома, вы сначала должны создать и инициализировать этот дом (построить, если хотите), а затем получить доступ к экземплярам мебели дома.
В этом случае вам нужно будет создать экземпляр нового Form1 и передать его конструктору формы головоломки.
Form1 myForm = new Form1();
Puzzle myPuzzle = new Puzzle(myForm);
Теперь Puzzle сможет получить доступ к этому экземпляру кнопок Form1.
Примечание:
Вы можете найти экземпляр программы Form1, заглянув в Program.cs файл вашего решения.
Комментарии:
1. Спасибо! Но куда мне поместить «Form1 myForm = new Form1 ();»»Головоломка myPuzzle = новая головоломка (myForm);» эти две строки???
2. Как я уже говорил, Program.cs уже имеет
Form1 myForm = new Form1();
, но имя ссылочной переменной Form1 может быть чем-то иным, чем «myForm». Кроме того, вы уверены, что вам нужны две формы? Возможно, «Головоломка» может быть просто классом, а не формой.3. Головоломка — это класс. И почему эти кнопки все еще имеют нулевые значения, когда я пытаюсь вызвать их в Form1.cs. ‘public void reset() { for (int i = 0; i < 3; i ) for (int j = 0; j < 3; j ) { кнопки [i, j].BackColor = Color.Lime; } }’ это метод в классе Puzzle . Пожалуйста, помогите. Спасибо!
4. Вы должны присвоить значения каждой кнопке [x, y] index.
button[0,0] = form1.Button1
, и т.д., ноform1
должны быть экземпляром формы, как указано выше. Чтобы получить нужную функциональность, вам нужно передать переменную экземпляраform1
конструктору Puzzlevar puzzle = new Puzzle(form1)
. Только после этого вы можете начать использовать кнопки в вашем экземпляре Puzzle .