J'essaie de faire un Panel
défilement, mais uniquement verticalement (donc AutoScroll
ne fonctionnera pas car les contrôles enfants dépassent le bord gauche et doivent).
Comment cela se passe-t-il ?
J'essaie de faire un Panel
défilement, mais uniquement verticalement (donc AutoScroll
ne fonctionnera pas car les contrôles enfants dépassent le bord gauche et doivent).
Comment cela se passe-t-il ?
Essayez plutôt ceci pour un défilement vertical "uniquement".
(le défilement automatique doit être désactivé pour que les modifications soient acceptées)
mypanel.AutoScroll = false;
mypanel.HorizontalScroll.Enabled = false;
mypanel.HorizontalScroll.Visible = false;
mypanel.HorizontalScroll.Maximum = 0;
mypanel.AutoScroll = true;
En supposant que vous utilisiez winforms, les composants du panneau par défaut ne vous offrent pas la possibilité de désactiver les composants à défilement horizontal. Une solution de contournement consiste à désactiver le défilement automatique et à ajouter une barre de défilement vous-même :
ScrollBar vScrollBar1 = new VScrollBar();
vScrollBar1.Dock = DockStyle.Right;
vScrollBar1.Scroll += (sender, e) => { panel1.VerticalScroll.Value = vScrollBar1.Value; };
panel1.Controls.Add(vScrollBar1);
Discussion détaillée aquí .
Je n'ai vraiment pas envie de faire ce "hack". Comment puis-je le faire manuellement avec un VScrollBar
composant ?
@Teoman cet exemple ne m'aide pas, je peux le faire avec le concepteur de formulaires. Quelle est la formule pour déterminer les valeurs max/min de la barre de défilement, comment puis-je décaler les contrôles à l'intérieur du panneau lorsque la barre de défilement se déroule vers le bas, etc.
Il suffit de synchroniser VerticalScroll.Value
avec les propriétés Scroll
événement. Mise à jour du code. Notez que pour obtenir l'effet de défilement, il doit y avoir des éléments qui débordent du bord inférieur du panneau (c'est-à-dire qu'il doit y avoir des éléments non visibles vers lesquels défiler).
Vous trouverez ci-dessous le code qui met en œuvre la barre de défilement verticale personnalisée. Le détail important ici est de savoir quand la barre de défilement est nécessaire en calculant l'espace consommé par les contrôles que vous ajoutez au panneau.
panelUserInput.SuspendLayout();
panelUserInput.Controls.Clear();
panelUserInput.AutoScroll = false;
panelUserInput.VerticalScroll.Visible = false;
// here you'd be adding controls
int x = 20, y = 20, height = 0;
for (int inx = 0; inx < numControls; inx++ )
{
// this example uses textbox control
TextBox txt = new TextBox();
txt.Location = new System.Drawing.Point(x, y);
// add whatever details you need for this control
// before adding it to the panel
panelUserInput.Controls.Add(txt);
height = y + txt.Height;
y += 25;
}
if (height > panelUserInput.Height)
{
VScrollBar bar = new VScrollBar();
bar.Dock = DockStyle.Right;
bar.Scroll += (sender, e) => { panelUserInput.VerticalScroll.Value = bar.Value; };
bar.Top = 0;
bar.Left = panelUserInput.Width - bar.Width;
bar.Height = panelUserInput.Height;
bar.Visible = true;
panelUserInput.Controls.Add(bar);
}
panelUserInput.ResumeLayout();
// then update the form
this.PerformLayout();
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Vous voulez donc n'avoir que le défilement vertical lorsque c'est nécessaire ? En réglant le paramètre
Scrollbars
à la propriétéVertical
ne fonctionne pas ?0 votes
@debracey Il n'y a pas de propriété appelée
Scrollbars
sur monPanel
et il n'apparaît pas dans Intellisense. J'ai vu d'autres personnes en parler, donc je pense que cela existe, mais je m'y prends mal. J'obtiens cette erreur pour cette ligne :panel1.Scrollbars = ScrollBars.Vertical;
-'System.Windows.Forms.Panel' does not contain a definition for 'Scrollbars' and no extension method 'Scrollbars' accepting a first argument of type 'System.Windows.Forms.Panel' could be found (are you missing a using directive or an assembly reference?)
0 votes
@debracey J'utilise VS 2010 Pro.