2012-04-24 2 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

고마워요.로드와 활성화를 모두 시도했지만 둘 다 항상 거짓으로 보였다 !!! 그러나 그것은 나에게 사건의 스타트 업 순서를 찾아서 나와있는 이벤트를 사용해야한다는 것을 알게했습니다. D 당신의 도움에 감사드립니다. –

+0

@JackEker, 아, 맞아. 양식 평생 차트를 결코 기억할 수 없습니다. 왜냐하면, 음, 나는 필요할 때 그것을 찾는다.) –

관련 문제