2012-07-25 9 views
6

Mam ListView In My Winform, który ma 4 kolumny, Nazwa, Pieniądze, ID i Poziom.Zapobieganie zmianie rozmiaru kolumn w ListView?

Problem polega na tym, że po uruchomieniu aplikacji nadal mam możliwość wprowadzania kolumn o szerokości i zmieniania ich.

Szukałem i stwierdził, że należy zrobić coś takiego:

private void listView1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e) 
{ 
    e.Cancel = true; 
    e.NewWidth = listView1.Columns[e.ColumnIndex].Width; 
} 

Ale problemem jest to, że kiedy debugowany i Ccanged szerokości kolumn, wydarzenie to nawet nie pali!

Dlaczego nie wystrzelono?

Jak ustawić szerokość kolumn?

Zrobiłem nową aplikację WinForm na wszelki wypadek gdyby coś było nie tak w moim starym, on zwolniony, ale tylko po raz pierwszy uruchomiony aplikację .. Oto kod:

namespace CsharpWinformTestingStuff 
{ 
    public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
     listView1.ColumnWidthChanging += new ColumnWidthChangingEventHandler(listView1_ColumnWidthChanging); 
    } 

    void listView1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e) 
    { 

     e.Cancel = true; 
     e.NewWidth = listView1.Columns[e.ColumnIndex].Width; 
    } 
    } 
} 

tutaj jest składnikiem initialize na wszelki wypadek może chcesz wiedzieć:

private void InitializeComponent() 
{ 
    this.listView1 = new System.Windows.Forms.ListView(); 
    this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 
    this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 
    this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 
    this.SuspendLayout(); 
    // 
    // listView1 
    // 
    this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 
     this.columnHeader1, 
     this.columnHeader2, 
     this.columnHeader3}); 
    this.listView1.GridLines = true; 
    this.listView1.Location = new System.Drawing.Point(12, 12); 
    this.listView1.Name = "listView1"; 
    this.listView1.Size = new System.Drawing.Size(284, 275); 
    this.listView1.TabIndex = 0; 
    this.listView1.UseCompatibleStateImageBehavior = false; 
    this.listView1.View = System.Windows.Forms.View.Details; 
    // 
    // columnHeader1 
    // 
    this.columnHeader1.Text = "Name"; 
    this.columnHeader1.Width = 97; 
    // 
    // columnHeader2 
    // 
    this.columnHeader2.Text = "Age"; 
    this.columnHeader2.Width = 52; 
    // 
    // columnHeader3 
    // 
    this.columnHeader3.Text = "Email"; 
    this.columnHeader3.Width = 157; 
    // 
    // Form1 
    // 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
    this.ClientSize = new System.Drawing.Size(308, 299); 
    this.Controls.Add(this.listView1); 
    this.Name = "Form1"; 
    this.Text = "Form1"; 
    this.ResumeLayout(false); 

} 
+0

możliwy duplikat [jak naprawić szerokość kolumny widoku listy w oknie C#?] (Http://stackoverflow.com/questions/2460308/how-to-fix-the-column-width- of-a-listview-in-c-sharp-windows-form) –

+0

strzela. Spróbuj upewnić się, że zdarzenie jest prawidłowo rejestrowane. – nawfal

Odpowiedz

0

Możesz sprawdzić Better ListView Express. W kolumnach wprowadziliśmy właściwość AllowResize, która spełnia dokładnie to, czego potrzebujesz.

9

trzeba zarejestrować zdarzenie ColumnWidthChanging z formularza:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     // This line registers the event, soc that the form can "hear" it and call the indicated handling code: 
     this.listView1.ColumnWidthChanging += new ColumnWidthChangingEventHandler(listView1_ColumnWidthChanging); 
    } 

    void listView1_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e) 
    { 
     Console.Write("Column Resizing"); 
     e.NewWidth = this.listView1.Columns[e.ColumnIndex].Width; 
     e.Cancel = true; 
    } 
} 
+0

Nadal nie wypalam .. Zrobiłem dokładnie to, co powiedziałeś. – vexe

+0

Czy możesz napisać swój kod? – XIVSolutions

+0

@XIVSoulutions Jest dokładnie taki sam jak powyższy kod. – vexe

0

Wystarczy kliknąć na Properties >>Wydarzenia >>ColumnWidthChanging.

enter image description here

Następnie dodać ten kod:

private void lstItems_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e) 
    { 
     e.Cancel = true; 
     e.NewWidth = lstItems.Columns[e.ColumnIndex].Width; 
    } 

Szczęśliwy kodowania!^_^

+0

Jestem zaskoczony, że anulowanie nie tylko zapobiega zmienić mimo to - potrzebujesz drugiej linii? – Bridge

+1

yes sir, pobierając ** current ** Width z kolumny listView i przekazując ją jako ** NewWidth **, ZAWSZE ustawiamy szerokość na bieżącą szerokość. Nawiasem mówiąc, ** BRIDGE **, to nazwa aplikacji mojego obecnego programu ...^_^ – LoudSpeaker

+2

Nie martw się, nie urosła czucie, jestem osobą! – Bridge

Powiązane problemy