这似乎是完全不合理的要求,但我一直在设计一个多面板的真实设备模拟器,它有很多不同的屏幕,我目前的方法是只添加代码中的所有屏幕对象,并在我切换时处理它们到另一个屏幕。是否可以通过方法定义类作用域对象?
我有一些固定的对象,这是真正的设备按钮,已经定义和到位。事情是,我在方法中分隔每个面板结构,例如:buildLogin()
,buildMainScreen()
等,我需要从这些方法编辑一些屏幕对象,如启用时将启用的功能标签的颜色更改为绿色或白色如果禁用。
我的问题是:是否有可能从整个类中可访问的方法声明对象,就像它是在变量声明部分中定义的一样?这将是像PHP中的GLOBAL。
我无法像在任何事物上一样声明它,因为当我处理这些对象时,我不能“重新创建”它们,因为父母或重新使用已处理的对象或其他东西...
[编辑]示例代码:
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!";
}
}
在这个设计中肯定会出现错误,提供一些代码,例如如何创建屏幕以及何时需要访问这样的全局对象? – sll
你有没有想过使用面向对象的设计?这使它更容易。 – PVitt
我对你之后的事情有些模糊 - 你不能只声明一个类作用域属性/字段,然后在你的方法中设置它吗?否则,可能重构传递的参数,然后你可以修改它们......这听起来像你的程序结构可能是什么需要改变这里... – Chris