2017-10-06 5 views
0

버튼을 클릭 할 때 usercontrol 변경 메서드를 만들려고합니다.C# winforms는 패널에서 usercontrol을 메서드로 변경합니다.

UserControl을

namespace LogAnalyzer 
{ 
    public partial class UserSettings : UserControl 
    { 
     private static UserSettings _instance; 
     public static UserSettings Instance 
     { 
      get 
      { 
       if (_instance == null) 
        _instance = new UserSettings(); 
       return _instance; 
      } 
     } 
     public UserSettings() 
     { 
      InitializeComponent(); 
     } 

     private void btnUnpackPath_Click(object sender, EventArgs e) 
     { 
      flowLayoutPanel1.Hide(); 
     } 
    } 
} 

내 양식이 내 형태로 나에게이 라인에 오류가 있습니다

namespace LogAnalyzer 
{ 
    public partial class LogAnalyzerMain : Form 
    { 
     public LogAnalyzerMain() 
     { 
      InitializeComponent(); 
     } 

     private void ChangeInstance(Control tab) { 
      if (!panelDisplay.Controls.Contains(tab)) 
      { 
       panelDisplay.Controls.Add(tab); 
       tab.Dock = DockStyle.Fill; 
      } 
      tab.BringToFront(); 
     } 

     private void btnSettings_Click(object sender, EventArgs e) 
     { 
      ChangeInstance(UserSettings); 
     } 
    } 
} 

('UserSettings'주어진 상황에서 유효하지 않은 유형이다)

ChangeInstance(UserSettings); 
+0

하는'UserSettings.Instance을 시도 사용할 수 있습니다 ' – Reniuz

+0

이 오류는 정당화됩니다. 유형이 아닌 인스턴스를 기대합니다. 대신'ChangeInstance (UserSettings.Instance)'가되어야합니다. – dlatikay

답변

1

클래스 자체를 전달하고 있지만이 메서드는 인스턴스를 취합니다. 싱글렛이 있기 때문에 N 재산 당신은을 사용할 수

ChangeInstance(UserSettings.Instance); 

그렇지 않으면 당신은 필드로 LogAnalyzerMain 예를 들면, 어딘가에 인스턴스를 저장했다 또는 당신의 폼의 컨트롤 인 경우에 당신이 this.Controls.OfType<UserSettings>().First()