2010-11-08 10 views
6

J'ai un panneau avec AutoScroll mis à true. Dans celui-ci, j'ajoute par programmation ComboBox contrôles. Si j'ajoute suffisamment de contrôles pour dépasser la taille visible du panneau, une barre de défilement apparaît (jusqu'ici tout va bien). Cependant, si j'ouvre l'une des listes déroulantes près du bas de la zone visible, la liste déroulante n'est pas affichée correctement et la zone défilante semble être agrandie. Il en résulte que tous les contrôles sont "tirés" vers le nouveau fond du panneau avec un nouvel espace vide en haut. Si je continue à appuyer sur la liste déroulante en bas du panneau, la zone défilante continuera à se développer indéfiniment. J'ancre les contrôles à gauche, à droite et en haut donc je ne pense pas que l'ancrage soit impliqué. Y a-t-il quelque chose d'évident qui pourrait en être la cause?Zone de liste déroulante dans un panneau déroulant provoquant des problèmes

Mise à jour: Il semble que le problème réside dans l'ancrage des contrôles vers la droite. Si je n'ancre pas à droite alors je n'obtiens pas le comportement étrange. Cependant, sans ancrage correct, le contrôle est coupé par la barre de défilement.

est ici un test simplifié I construit qui montre la question:

public Form1() 
    { 
     InitializeComponent(); 

     Panel panel = new Panel(); 
     panel.Size = new Size(80, 200); 
     panel.AutoScroll = true; 

     for (int i = 0; i < 10; ++i) 
     { 
      ComboBox cb = new ComboBox(); 
      cb.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; 
      cb.Items.Add("Option 1"); 
      cb.Items.Add("Option 2"); 
      cb.Items.Add("Option 3"); 
      cb.Items.Add("Option 4"); 
      cb.Location = new Point(0, i * 24); 
      panel.Controls.Add(cb); 
     } 

     Controls.Add(panel); 
    } 

Si vous faites défiler le bas du panneau et appuyez sur les zones de liste déroulante près du fond que vous remarquerez l'étrange comportement.

+0

quelle plateforme? Silverlight? wpf? flash? winforms? aspic? (etc.) –

+0

Winforms, désolé de ne pas inclure cette balise plus tôt. – Dennis

+0

J'ai essayé votre code de test et n'ai rien vu de semblable à ce que vous avez décrit. Quelle version de Visual Studio utilisez-vous? – stone

Répondre

0

Cela semble être un problème spécifique aux périphériques que vous utilisez. Je ne peux pas reproduire ce comportement du tout. Avez-vous essayé de définir la propriété Dock du Panel? Qu'en est-il des autres propriétés qui affectent le comportement de défilement (AutoScrollMargin, AutoScrollMinSize, AutoScrollPosition)? Je jouerais aussi avec la taille du panneau, et peut-être utiliser la classe System.Windows.Forms.Screen pour le déterminer automatiquement en fonction du périphérique.

+0

Ce comportement semble définitivement spécifique au périphérique. J'ai essayé ceci sur quelques appareils et n'ai pas pu le reproduire sur chacun d'eux. Je vais contacter le fabricant pour voir s'il y a une raison pour que cela arrive sur leur appareil et pas d'autres. Désolé pour la réponse tardive... – Dennis

0

Essayez de définir le défilement automatique sur false et essayez d'utiliser les barres de défilement normalement. Sinon, si vous ne parvenez pas à trouver une autre solution raisonnable, il serait possible de gérer les événements de défilement/redimensionnement et de redimensionner/déplacer manuellement vos contrôles (Exactement ce que fait l'ancre) Bien que ce soit assez ennuyeux à faire, se débarrasser de tous les problèmes que vous pourriez avoir.

0

J'ai aussi pu tester sur un périphérique de Windows CE, sous Visual Studio 2005, .Net CF 2.0 car nous aussi avons des choses en utilisant des équipements plus anciens aussi. Je n'ai pas de problèmes. Peut-il s'agir d'un problème de la version de Windows CE sur l'appareil qui cause le problème? Quel appareil est utilisé (c.-à-d.: Fabricant?). J'ai même créé un tout nouveau projet du formulaire unique, donc pas d'autres choses qui vont altérer/influencer votre code.

Le comportement fonctionne-t-il pendant le débogage, l'exécution ou les deux?