7
votes

Comment accéder aux contrôles dans le panneau en C #

J'utilise un panneau en C # Winforms et remplissez le panneau avec l'abscription de la zone d'image à l'aide de la boucle

Par exemple, le nom du panneau est panal p>

System.Windows.Forms.PictureBox' is a 'type' but is used like a 'variable'


3 commentaires

Quelle est l'erreur? Aussi ce wpf ou winforms? Plus vous donnez de détail, plus vous obtiendrez la réponse que vous recherchez.


J'utilise les winforms et l'erreur est System.Windows.Forms.picturebox 'est un "type" mais est utilisé comme une "variable"


@Qulzam: Le code de C. Ross résoudra votre problème


7 Réponses :


0
votes

Ne voulez-vous pas

panal.Controls?
 //^ this is an 'a'


2 commentaires

Ils ... mais cela ne causent pas d'erreur, c'est simplement le nom du contrôle et l'orthographe agnostique.


Eh bien, je ne peux pas savoir que s'il ne dit pas quelle erreur il reçoit



0
votes

Dans votre deuxième bloc, la période après P.getType == Imagesbox est fausse (aucune période requise ici) ... Pour cette affaire, GetType est une méthode / une fonction non une propriété, ce qui doit donc être p.getType ()


0 commentaires

22
votes

Il semble y avoir des fautes de frappe dans cette section (et éventuellement une erreur réelle).

foreach (Control p in panal.Controls)
   if (p is PictureBox)
      p.Location = new Point(50, p.Location.Y);


3 commentaires

+1. Pour que la réponse complète, je suppose que cela pourrait être une bonne idée de signaler les fautes de frappe et des erreurs dans l'extrait de code d'origine.


Pourrait également utiliser Controls.oftype (), pas que cela raccourcit le code.


dans la ligne (p.location.x = 50;) est err i.e ne peut pas modifier la valeur de retour de 'system.windows.forms.control.location' car il n'est pas une variable



1
votes

Ensuite, il peut y avoir des bugs dans votre boucle. XXX


2 commentaires

J'ai reçu l'erreur suivante dans la ligne p.location.x = 50; Erreur 1 ne peut pas modifier la valeur de retour de 'system.windows.forms.control.location' car il n'est pas une variable


Contrôle connu en forme de picture: if (p est Picturebox) {Picturebox PB = (Imagebox) P}



0
votes

Vous feriez mieux de créer une variable privée de la forme elle-même, de sorte que vous puissiez faire des choses avec elle sans avoir à marcher à chaque fois que les commandes du panneau.


0 commentaires

4
votes

Essayez ceci:

foreach (Control p in panal.Controls)
{
    if (p is PictureBox)
    {
        p.Left = 50;
    }
}


4 commentaires

Merci Musigenesis. Je le résolve. Je suis toujours configuré le pourquoi (p.x = 50;) est faux et donner une erreur. Si nous utilisons le (p.location = nouveau point (50,10);) il est correct. Je pense que ce nouveau point est également égal aux valeurs X et Y. Quelqu'un peut-il expliquer cela?


Je ne peux pas l'expliquer, mais ce serait une bonne question Stackoverflow.


Je pense que Picturebox.Location.x est en lecture seule sur la propriété. Donc, nous ne pouvons pas changer ou l'écrire.


Ouais, mais vous avez posé une question à laquelle je n'ai jamais pensé: pourquoi les X et Y sont-ils en lecture seule (ou tout contrôle) en lecture seule? Il y a probablement une bonne raison, mais je ne l'ai jamais rencontrée.



1
votes

Je pense que xxx

pourrait aussi être une solution.


0 commentaires