2012-11-01 18 views
6

Ich entwickle eine Anwendung, die eine ListBox Kontrolle benötigt. Leider, wenn ich zu viele Artikel in der ListBox hinzufügen, wird eine vertikale Bildlaufleiste angezeigt. Gibt es etwas, was ich tun kann, um die vertikale Bildlaufleiste zu verbergen, die von der ListBox gezeigt wird? Ich kann sehen, dass es eine Eigenschaft gibt, um die horizontale Bildlaufleiste zu verbergen, aber es gibt keine Eigenschaft für die vertikale Bildlaufleiste.Vertikale Bildlaufleiste im ListBox Steuerelement ausblenden

+0

Wenn Sie die vertikale Bildlaufleiste entfernen, wie würden Benutzer dann auf die Elemente zugreifen, die über den Rand der Bildlaufleiste hinausgehen? –

+0

@LeeTaylor Danke für die Antwort. Ich habe vergessen zu erwähnen, dass ich eine RichTextBox habe. Ich habe es geschafft, die Listbox innerhalb der RichTextBox zu steuern. Es müssen also keine Bildlaufleisten in der Listbox angezeigt werden. Einen schönen Tag haben :) –

+0

OK, mir ist keine Möglichkeit bekannt, die Bildlaufleisten zu entfernen. Der einzige Weg, den ich kenne, besteht darin, sicherzustellen, dass die Listbox lang genug ist, um alle Ihre Gegenstände aufzunehmen. –

Antwort

8

Das Problem wurde gelöst. Ich habe erstellt einfach ein neues Projekt der Vorlage eine Klassenbibliothek mit dem folgenden Code

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(); 
       } 
      } 
     } 
    }  
} 

Dann habe ich das Projekt baut eine neue Klassenbibliothek ClassLibrary1.dll

Auf meinem Hauptprojekt Ausgabe I habe mit der rechten Maustaste auf ToolBox geklickt und Choose Items... ausgewählt. Klicken Sie auf Durchsuchen ... und wählte die Klasse Bibliothek, die ich vor kurzem erstellt (ClassLibrary1.dll) und klickte auf Öffnen Sie dann auf OK. So konnte ich meine benutzerdefinierte ListBox, die keine vertikalen Bildlaufleisten mehr hat.

1

Abgesehen von der horizontalen Bildlaufleiste gibt es bei normaler Verwendung keine Möglichkeit, die vertikale Bildlaufleiste auszuschalten.

Sie können es immer nur sichtbar oder automatisch mit der Eigenschaft ScrollAlwaysVisible (auch in VB) setzen.

Wenn Sie Artikel hinzufügen, können Sie stattdessen Clientsize neu berechnen, indem die Berechnung, so etwas wie dieses (ungetestet, müssen Sie möglicherweise Padding-Werte als auch hinzugefügt werden):

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

Natürlich sollten Sie hinzufügen Überprüfen Sie den Wert, wenn er Null ist und/oder eine minimale/maximale Höhe haben soll.

+0

Danke, ich habe erfolgreich die vertikale Bildlaufleiste ausgeblendet, die eine Klassenbibliothek erstellt. Ich poste meine Lösung in einem Moment :) –

+1

Nice :-) Wie Sie gefragt, ob es mit dem ListBox-Steuerelement getan werden konnte, lasse ich meine Antwort so wie sie ist :-) – K3N

+0

Keine Probleme. Danke für die Antwort. Ich wünsche ihnen einen wunderbaren Tag :) –

Verwandte Themen