多くの異なる画面を持つマルチパネルのリアルデバイスシミュレータを設計していますが、現在のアプローチはコードからのすべてのスクリーンオブジェクトを追加して、切り替えたときにそれらを破棄することです別の画面にメソッドからクラススコープオブジェクトを定義することは可能ですか?
私はいくつかの固定オブジェクトを持っています。これは、すでに定義されている実際のデバイスボタンです。問題は、私は方法で各パネルの構造を分離しています。たとえば、buildLogin()
、buildMainScreen()
などです。有効な場合は、有効な機能ラベルの色を緑に変更するか、無効の場合は白。
私の質問は:変数宣言セクションで定義されているように、クラス全体でアクセス可能なメソッドからオブジェクトを宣言することは可能でしょうか?それはPHPのGLOBALのようなものです。
私はオブジェクトを処分するとき、私はそれらを "再作成"することができないため、いつものようにすべての上に宣言することができません。 ...
[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!";
}
}
このデザインでは間違いがあります。たとえば、画面の作成方法やそのようなグローバルオブジェクトへのアクセスが必要なときなど、いくつかのコードを提供しますか? – sll
オブジェクト指向設計の使用について考えましたか?これにより、ずっと簡単になります。 – PVitt
私はあなたが何をしているのか少しばかげている - あなたはクラススコープのプロパティ/フィールドを宣言して、あなたのメソッド内からそれを設定することはできませんか?おそらくリファクタリングでパラメータを渡すことに失敗して、それを修正することができません...あなたのプログラム構造がおそらくここで変わる必要があると確信しています... – Chris