2012-04-24 9 views
0

これで、ログインフォームから私のホームフォームにブール値を渡そうとしています。通常はこれがうまくいくので、プロパティを使用します。しかし、私は今度は同様のメソッドを使うことができると思っていましたが、フォーム上にシングルトンファクトリを実装しています。シングルトン使用時にWinforms間でプロパティを渡す

これに関連するログインコードは次のとおりです。 AdminAccessプロパティが正しく設定され、値が正しいことを確認しました。

public HomeForm() 
    { 
     InitializeComponent(); 
     //just to check what is in the property quickly 
     textBox1.Text = AdminPermissions.ToString(); 
    } 

private bool adminPermissions; 
public bool AdminPermissions 
    { 
     private get { return adminPermissions; } 
     set { adminPermissions = value; } 
    } 

public Form StartupHome 
    { 
     set; 
     get; 
    } 

private static HomeForm homeUI; 
public static HomeForm HomeUI 
    { 
     get 
     { 
      if (homeUI == null || homeUI.IsDisposed) 
      { 
       homeUI = new HomeForm(); 
      } 
      return homeUI; 
     } 
    } 

値は、ループが実行されている場合HomeUIがフォームの新しいインスタンスが作成される場合にリセットされます:

private bool adminAccess; 

public bool AdminAccess 
    { 
     get { return adminAccess; } 
     private set { adminAccess = value; } 
    } 

private void btnLogin_Click(object sender, EventArgs e) 
    { 
     //Some Code Does Stuff 

     OpenHome(); 
    } 

private void OpenHome() 
    { 
     HomeForm CreateHomeForm = HomeForm.HomeUI; 
     CreateHomeForm.StartupHome = this; 

     //Trying to set the property. 
     CreateHomeForm.AdminPermissions= this.AdminAccess; 

     CreateHomeForm.Show(); 
     this.Hide(); 
    } 

は、ここでホームフォームから関連するコードです。私はこれを修正して実用的な解決策を得る方法を考えているようではありません。あなたは私がかなりアマチュアだと言うことができるので、私はちょうどこれにクイックでクリーンなソリューションを探しています:) あなたの時間の前にありがとう!

答えて

0

実際にはAdminPermissionsプロパティが設定される前にコンストラクタに値を割り当てます。この

public class HomeForm 
{ 
    public HomeForm() 
    { 
     InitializeComponent(); 
    } 

    private bool adminPermissions; 
    public bool AdminPermissions 
    { 
     get { return adminPermissions; } 
     set { 
      adminPermissions = value; 
      textBox1.Text = value.ToString(); 
     } 
    } 

    ... 
} 
+0

これは、他の答えに記載されている援助からの表示されたイベントを使用して、私の問題を解決しました!私はそれが私が何かばかげたことを望んでいたし、それはでした:) –

0

のようにコードを変更することはFormイベントの一つでtextBox1.Text値を設定してみてください。最初にLoadedを試してから、Activatedを試してください。コンストラクタで毎回falseにリセットしています!

+0

ありがとう私は両方の負荷と活性化を試みたが、両方とも常にFalseとして示した!しかし、それは私のフォームにイベントのスタートアップの順番を見て、私が表示されたイベントを使用する必要があることを知ることにつながりました:Dあなたの助けに感謝します。 –

+0

@ジャックエーカー、あ、そうです。私はフォームライフタイムチャートを覚えていない。なぜなら、まあ、私はそれを見ているだけなので、必要に応じて) –

関連する問題