2009-04-20 6 views
1

J'ai un tabcontrol avec plusieurs tabpages. J'ai également accroché dans l'événement InputPanel.EnabledChanged de sorte que le tabcontrol redimensionne lorsque le panneau d'entrée est activé. Ce que je voudrais faire est de s'assurer que le contrôle avec le focus est visible lorsque l'onglet est redimensionné. Quelle est la meilleure façon d'accomplir cela? Notez que j'utilise le .NET Compact Framework.Comment puis-je m'assurer qu'un contrôle est visible lorsqu'il se trouve dans un contrôle de défilement?

Merci, MrB

Répondre

1

Vous avez deux ou trois choses que vous devez/pouvez garder une trace de ici:

• position de défilement actuelle
• Position de l'élément taraudé (je suppose une zone de texte) quand ils le tapota

Notez que l'événement EnabledChanged pour le InputPanel est assez facile à gérer (je suppose que vous l'avez déjà fait): vérifiez l'état Enabled du InputPanel et faites + = ou - = sur la Height du tabcontrol pour que InputPanel couvrir quoi que ce soit. Ma compréhension est que votre problème est vraiment de déterminer où la zone de texte était, parce que votre pire scénario est qu'il sera déplacé hors-écran lorsque le tabcontrol redimensionne. Je crois (pas sûr à 100%) que redimensionner un tabcontrol gardera le haut du contenu du tabcontrol visible et vous devrez faire défiler vers le bas pour voir tout ce qui est maintenant "couvert" par le InputPanel. Ce que vous voudrez faire dans l'événement EnabledChanged est de trouver l'emplacement du contrôle qui a été tapé (ou la coordonnée de l'écran qui a été tapée - ce qui est le plus facile pour vous). S'il se trouve dans la zone de danger de (ClientSize.Height-InputPanel.Bounds.Height, ClientSize.Height), vous devrez ajuster votre défilement.

C'est une demi-C# -Demi-pseudocode mais vous devriez être en mesure de voir où je vais avec elle:

int yOffset = top coordonnée y du contrôle taraudée;
si (yOffset> ClientSize.Height-inputPanel.Bounds.Height)
{
      int YSHIFT = quantité à déplacer tout en;
      Point scrollPosition = AutoScrollPosition;
      scrollPosition.Y = scrollPosition.Y - yShift;
      AutoScrollPosition = scrollPosition;
}

Ce que cela fait, en un mot, est vérifie si votre InputPanel va couvrir le contrôle souhaité, et si oui, faites défiler par pixels YSHIFT, où YSHIFT pourrait être toute la hauteur de la InputPanel, ou juste assez pour montrer à peine votre contrôle (tout ce que vous voulez).
• .NET CF semble très tolérant à propos de la définition de règles de défilement invalides. Si vous ne pouvez faire défiler que 10 pixels et que vous lui dites de faire défiler 100, il s'arrêtera à 10.
• La coordonnée de l'écran (0,0) est le coin supérieur gauche de l'écran visible - PAS le formulaire affiché. Vous pouvez vous trébucher si vous supposez que (0,0) est le haut de votre formulaire.

0

La seule façon qui me vient à l'esprit est calculer ce par des positions de contrôle currrent sur un écran.

Questions connexes