2012-11-01 3 views
6

Je développe une application qui nécessite un contrôle ListBox. Malheureusement, lorsque j'ajoute trop d'éléments dans le ListBox, une barre de défilement verticale est affichée. Y at-il quelque chose que je peux faire pour cacher la barre de défilement verticale montrée par le ListBox? Je peux voir qu'il y a une propriété pour cacher la barre de défilement horizontale mais il n'y a aucune propriété pour la barre de défilement verticale.Masquer la barre de défilement verticale dans le contrôle ListBox

+0

Si vous supprimez la barre de défilement verticale, alors comment les utilisateurs accèdent-ils aux éléments au-delà du bord du défilement? –

+0

@LeeTaylor Merci d'avoir répondu. J'ai oublié de mentionner que j'ai un RichTextBox. J'ai réussi à contrôler la zone de liste dans le RichTextBox. Il n'est donc pas nécessaire d'afficher les barres de défilement dans la liste. Bonne journée :) –

+0

OK, je ne connais aucun moyen de supprimer les barres de défilement. Le seul moyen que je connaisse est de m'assurer que la liste est assez longue pour contenir tous vos objets. –

Répondre

8

Le problème a été résolu. J'ai simplement créé un nouveau projet de modèle d'une bibliothèque de classes avec le code suivant

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace ClassLibrary1 
{ 
    public class MyListBox : System.Windows.Forms.ListBox 
    { 
     private bool mShowScroll; 
     protected override System.Windows.Forms.CreateParams CreateParams 
     { 
      get 
      { 
       CreateParams cp = base.CreateParams; 
       if (!mShowScroll) 
        cp.Style = cp.Style & ~0x200000; 
       return cp; 
      } 
     } 
     public bool ShowScrollbar 
     { 
      get { return mShowScroll; } 
      set 
      { 
       if (value != mShowScroll) 
       { 
        mShowScroll = value; 
        if (IsHandleCreated) 
         RecreateHandle(); 
       } 
      } 
     } 
    }  
} 

Ensuite, je l'ai construit le projet en sortie une nouvelle bibliothèque de classes ClassLibrary1.dll

Sur mon projet principal, je avez fait un clic droit sur ToolBox et sélectionné Choose Items.... Cliqué sur Parcourir ... et sélectionné la bibliothèque de classe que j'ai récemment créé (ClassLibrary1.dll) et cliqué sur Ouvrir puis sur OK. Ainsi, j'ai pu avoir ma coutume ListBox qui n'a plus de barres de défilement verticales.

1

À l'exception de la barre de défilement horizontale, il est impossible d'éteindre la barre de défilement verticale en utilisation normale.

Vous pouvez uniquement le définir toujours visible ou automatique en utilisant la propriété ScrollAlwaysVisible (également en VB).

Lorsque vous ajoutez un objet, vous pouvez au lieu recalculera ClientSize en calculant, quelque chose comme ça (non testé, vous pourriez avoir besoin d'ajouter des valeurs de Rembourrage à lui aussi bien):

Size sz = new Size(ListBox1.ClientSize.Width, _ 
        ListBox1.Items.Count * ListBox1.Font.Height); 
ListBox1.ClientSize = sz 

Bien sûr, vous devez ajouter vérifiez la valeur dans le cas où il est zéro, et/ou vous voulez une hauteur minimum/maximum.

+0

Merci, j'ai réussi à cacher la barre de défilement verticale créant une bibliothèque de classes. Je posterai ma solution dans un instant :) –

+1

Nice :-) Comme vous avez demandé si cela pouvait être fait avec le contrôle ListBox, je vais laisser ma réponse telle quelle :-) – K3N

+0

Pas de problème. Merci d'avoir répondu. Passez une bonne journée :) –

Questions connexes