2009-08-10 13 views

Antwort

84

Sie gaben die Antwort: -2 wird die Spalte automatisch auf die Länge des Textes in der Spaltenüberschrift skalieren, -1 wird auf das längste Element in der Spalte angepasst. All according to MSDN. Beachten Sie jedoch, dass Sie bei -1 die Spaltenbreite nach dem Hinzufügen der Elemente festlegen müssen. Wenn Sie also ein neues Element hinzufügen, müssen Sie auch die Eigenschaft width der Spalte (oder der Spalten) zuweisen, die gemäß den Daten im Steuerelement ListView automatisch skaliert werden soll.

19

Ich habe ein Programm erstellt, das meine ListView mehrmals gelöscht und wieder aufgefüllt hat. Aus irgendeinem Grund, wenn ich Spalten mit der Breite = -2 hinzufügte, stieß ich auf ein Problem mit der ersten Spalte, die viel zu lang ist. Was ich getan habe, um das zu beheben, war, diese Methode zu erstellen.

Das tolle an dieser Methode ist, dass Sie diese Größe praktisch überall einstellen können, um alle Ihre Spalten zu skalieren. Pass einfach deine ListView.

+1

dies die Breite der Breite des letzten Elements ENTER wird in Ihrem Listview – Qsiris

+0

gesetzt benutze ich Ihren Code aber wenn ich nur eine Spalte in meiner Listenansicht habe, bekomme ich jedes Mal eine horizontale Bildlaufleiste.Wenn es mindestens zwei Spalten gibt, funktioniert der Code gut. Weißt du, wo kommt dieses Verhalten her? – prototype0815

71

verwenden:

yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); 
yourListView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 

von here

+6

Aber was ist, wenn Sie das Maximum der Kopfzeile oder der Datenbreite wollen? Ohne Flimmern? – toddmo

1

ein bisschen auf Fredrik Antwort erweitern, wenn Sie die Spalten Auto-Resize Breite on the fly zum Beispiel festlegen mögen: In der ersten Spalte der Auto Einstellung -Größe Breite bis 70:

myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.None); 
myListView.Columns[0].Width = 70; 
myListView.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent); 
0

Diese Lösung wird zunächst die Größe der Spalten ändern, basierend auf Spaltendaten, wenn die Größe veränderte Breite smalle R als Header-Größe, wird die Größe Spalten anpassen, um mindestens die Überschrift anzupassen. Das ist eine ziemlich hässliche Lösung, aber es funktioniert.

lstContacts.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); 
colFirstName.Width = (colFirstName.Width < 60 ? 60 : colFirstName.Width); 
colLastName.Width = (colLastName.Width < 61 ? 61 : colLastName.Width); 
colPhoneNumber.Width = (colPhoneNumber.Width < 81 ? 81 : colPhoneNumber.Width); 
colEmail.Width = (colEmail.Width < 40 ? 40 : colEmail.Width); 

lstContacts ist das ListView. colFirstName ist eine Spalte, wobei 60 die erforderliche Breite für den Titel ist. Etc.

0

Ich glaube, der Autor wurde für eine gleichwertige Methode über die IDE suchen, der den Code hinter und stellen Sie sicher, dass alle Parameter waren vorhanden, usw. Wir fanden dieses von MS erzeugen würde:

Creating Event Handlers on the Windows Forms Designer

von einem VB Hintergrund kommt mir ist es das, was ich suchte, hier ist die kurze Version für den Klick Neben:

  1. das Formular Klicken oder dass y steuern Sie möchten einen Event-Handler für erstellen.
  2. Klicken Sie im Eigenschaftenfenster auf die Schaltfläche Ereignisse
  3. Klicken Sie in der Liste der verfügbaren Ereignisse auf das Ereignis, für das Sie einen Ereignishandler erstellen möchten.
  4. Im Feld rechts neben dem Ereignisnamen, geben Sie den Namen der Prozedur und drückt