Positionner le curseur d’attente sur un bouton à l’intérieur d’une zone de groupe

la programmation


Utilisation de VB 2008 Express.
J’ai un formulaire principal qui comporte un certain nombre de zones de groupe.

Comme je le souhaite, je peux positionner avec succès un curseur d’attente sur un contrôle du formulaire principal qui ne se trouve PAS dans une zone de groupe en utilisant les lignes de code suivantes : (en supposant que Button1 n’est PAS dans une zone de groupe)

Curseur.Position = PointVersÉcran(Bouton1.Location)
Curseur = Cursors.WaitCursor
Application.DoEvents()

Mais, si Button1 est positionné dans une zone de groupe (par exemple GroupBox1), je n’ai pas découvert comment placer le curseur sur ce bouton. Au lieu de cela, il est placé à un autre emplacement du formulaire principal qui ne se trouve pas dans GroupBox1.

J’ai essayé des variantes des éléments suivants sans succès :

Cursor.Position = PointToScreen (Button1.Location) et
Curseur.Position = PointVersÉcran(GroupBox1.Button1.Location)

Aucune erreur n’est générée mais le résultat souhaité n’est pas obtenu.
Je pense que cela est dû au fait que la propriété d’emplacement du bouton dans la zone de groupe est relative au coin supérieur gauche de la zone de groupe. Mais VB place le curseur comme si la propriété d’emplacement du bouton était relative au coin supérieur gauche du formulaire principal.
J’apprécierais des conseils – Merci, Mike

Ce que j’ai essayé :

Cursor.Position = PointToScreen(Button1.Location), and
Cursor.Position = PointToScreen(GroupBox1.Button1.Location)

Solution 1

L’emplacement d’un contrôle est toujours relatif à son conteneur : si vous avez un GroupBox sur un formulaire et que le GroupBox contient un bouton, alors myGroupBox.Location est relatif au coin supérieur gauche de myForm.ClientRectangle et myButton.Location est relatif. dans le coin supérieur gauche de myGroupBox.ClientRectangle.

Ainsi, pour identifier l’emplacement de myButton par rapport à myForm, vous devez ajouter myButton.Location à myGroupBox.Location – le résultat est relatif au coin supérieur gauche de Form.ClientArea. Vous pouvez ensuite utiliser PointToScreen pour identifier où il se trouve par rapport au coin supérieur gauche du moniteur réel.

Cela a du sens ?

Solution 2

poignée d’origine,
Cela est parfaitement logique et correspond à ce que je pensais pouvoir se produire.

Cependant, je ne sais pas comment y parvenir dans le code.
Peux-tu me donner un exemple?
Merci.

コメント

タイトルとURLをコピーしました