Je veux déterminer par programme l’espace que j’ai pour certains contrôles que je veux créer dynamicment. Donc, je veux obtenir la hauteur du conteneur et le diviser par le nombre de lignes (une constante).
J’ai cette fonction (ce code fait partie du formulaire sur lequel vit le panneau nommé dynamicPanel):
private static int getControlHeightToUse() { return (dynamicPanel.Height / NUMBER_OF_ROWS); }
… qui me donne l’erreur de compilation, “* Une référence d’object est requirejse pour le champ, la méthode ou la propriété non statique RememberNextGen_CRLogins.CRLoginsMainForm.dynamicPanel ‘*”
Je ne comprends pas ce qu’il essaie de me dire / ce qu’il veut.
Si je supprime le “statique”:
private int getControlHeightToUse() { return (dynamicPanel.Height / NUMBER_OF_ROWS); }
… Je reçois alors l’erreur de compilation “” Un initialiseur de champ ne peut pas référencer le champ, la méthode ou la propriété non statique “TitanNextGen_CRLogins.CRLoginsMainForm.getControlHeightToUse () ‘*”
… sur la ligne indiquée ci-dessous:
public partial class CRLoginsMainForm : Form { int controlHeight = getControlHeightToUse(); // <-- err
Une méthode static
n’a qu’un access direct aux membres static
de la classe. Si vous souhaitez utiliser des membres d’instance de la classe, vous devez lui transmettre une instance de la classe (ou en avoir une disponible sous forme static
comme dans le cas de un singleton).
Ainsi, vous pouvez modifier votre méthode pour prendre en compte le membre d’instance qui l’empêche d’être statique:
private static int getControlHeightToUse(Panel thePanel) { return (thePanel.Height / NUMBER_OF_ROWS); }
Il suffit ensuite de passer à dynamicPanel
lors de l’appel …
Les méthodes d’instance, cependant, peuvent accéder static
membres static
. N’oubliez pas que static
membres static
sont partagés par toutes les instances et existent même s’il n’existe aucune instance de la classe. Ainsi, ils ne peuvent pas appeler des membres d’instance car ils ne savent pas de quelle instance vous parlez.
passer dynamicPanel en tant que paramètre de la méthode statique
public partial class CRLoginsMainForm : Form { int controlHeight = getControlHeightToUse(dynamicPanel);
changez getControlHeightToUse comme ci-dessous
private static int getControlHeightToUse(Panel panel) { return (panel.Height / NUMBER_OF_ROWS); }
si vous voulez appeler une méthode non statique à partir d’une méthode statique, vous pouvez faire ce qui suit
public class Foo { // public method public void Method1() { } public static void Data2() { // call public method from static method new Foo().Method1(); } }