Это может показаться совершенно необоснованным, но я проектировал многопанельный симулятор реального устройства, который имеет много разных экранов, и мой текущий подход состоит в том, чтобы добавлять все экранные объекты только из кода и располагать их, когда я переключиться на другой экран.
У меня есть несколько фиксированных объектов, которые являются кнопками реального устройства, которые уже определены и на месте. Дело в том, что я разделяю каждую конструкцию панели методами, например: buildLogin()
, buildMainScreen()
и т. Д., И мне нужно отредактировать некоторые экранные объекты из этих методов, например, изменить цвет метки включенной функции на зеленый, если включен, или белый, если отключен.
Мой вопрос: возможно ли объявить объект из метода, который был бы доступен во всем классе, как если бы он был определен в разделе объявления переменных? Это было бы что-то вроде GLOBAL в PHP.
Я не могу объявить это поверх всего, как это было бы всегда, потому что, когда я располагаю объекты, я не могу «воссоздать» их из-за родительских функций или повторного использования удаленного объекта или чего-то еще. ..
[EDIT] Пример кода:
public partial class frmMain : Form
{
//I could as well do this:
//Button button1 = new Button();
public frmMain()
{
buildLogin();
}
private void buildLogin()
{
Panel panel1 = new Panel();
Controls.Add(panel1);
//But then, there is no way to do this:
// if (button1.IsDisposed == true) //because of the panel, or smthing
Button button1 = new Button();
panel1.Controls.Add(button1);
button1.Click += (s, f) => { panel1.Dispose(); buildMainMenu(); };
}
private void buildMainMenu()
{
Panel panel2 = new Panel();
Controls.Add(panel2);
Button button2 = new Button();
panel2.Controls.Add(button2);
}
//This was created from the Designer and is class-scoped
private void btn_Frame_TSK1_Click(object sender, EventArgs e)
{
//Here, I have no access to the objets I've created programatically.
//button1.Text = "Text changed!";
}
}