2010-10-11 3 views
1

J'essaie d'échanger les contrôles utilisateur dynamiquement. Comment puis-je "cacher" les contrôles sur un panneau? Les supprimer de la collection Controls ne fonctionne pas et la définition de la propriété visible du contrôle ne fonctionne pas.Le contrôle utilisateur sur le panneau reste visible lorsque le paramètre est défini sur false

ServersView servers = new ServersView();   
     ServersPresenter presenter = new ServersPresenter(servers); 
     _view.SettingsPanel.Controls.Add(servers); 
     _view.SettingsPanel.Controls[0].Visible = false; 

Le nouveau contrôle n'est pas visible après l'ajout car l'autre contrôle utilisateur est toujours visible. Quelqu'un peut-il me dire comment cacher les commandes de l'utilisateur?

Merci

+2

Etes-vous sûr que le contrôle que vous ajoutez est le premier de la collection SettingsPannel.Controls? S'il y a un autre contrôle, vous allez ajouter le vôtre et définir la propriété visible du premier! –

Répondre

1

Assurez-vous que les contrôles [0] est le vraiment le contrôle que vous pensez qu'il est. Par exemple, les serveurs sont-ils le même objet que _view.SettingsPanel.Controls [0]? Serait-il préférable d'ajouter tous les contrôles une fois, peut-être au chargement du formulaire ou à un moment précoce, puis définissez la propriété visible plus tard? De cette façon, vous n'avez pas à vous soucier d'ajouter trop de contrôles plus tard.

+0

Oui .. J'ajoutais accidentellement le même contrôle plus d'une fois. – Nick

1

Etes-vous sûr que la collection de contrôle est vide au moment où vous ajoutez un nouvel élément? Lorsque vous ajoutez un élément, il est placé à la fin de la collection, il est donc préférable de renvoyer le dernier élément.

Essayez d'obtenir l'indice du contrôle dans la collection:

int index = _view.SettingsPanel.Controls.GetChildIndex(servers); 
_view.SettingsPanel.Controls[index].Visible = false; 

à mon humble avis.

Questions connexes