2017-10-06 3 views
0

J'essaye de faire une méthode pour changer usercontrol quand un bouton est cliqué.Winforms C# changent usercontrol dans le panneau comme méthode

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(); 
     } 
    } 
} 

Ma forme

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); 
     } 
    } 
} 

Il me donne une erreur dans cette ligne sous ma forme ('UserSettings' est un type, ce qui est valable dans le contexte donné)

ChangeInstance(UserSettings); 
+0

Essayez 'UserSettings.Instance ' – Reniuz

+0

et cette erreur est justifiée, elle attend une instance, pas un type. devrait probablement être 'ChangeInstance (UserSettings.Instance)' à la place. – dlatikay

Répondre

1

Vous passez la classe elle-même mais la méthode en prend une instance, puisque vous avez un singleto n propriété que vous pouvez l'utiliser:

ChangeInstance(UserSettings.Instance); 

Sinon, vous a dû stocker l'instance quelque part, par exemple dans le LogAnalyzerMain comme champ ou si elle est un contrôle sur votre formulaire, vous pouvez utiliser this.Controls.OfType<UserSettings>().First()