2012-07-25 21 views
6

Tengo un ListView In My Winform que tiene 4 columnas, nombre, dinero, ID y nivel.¿Evitar que los usuarios cambien el ancho de las columnas en ListView?

El problema es que cuando ejecuto mi aplicación, todavía tengo la capacidad de meterse con el ancho de las columnas y cambiarlas.

I buscado y encontrado que yo debería hacer algo como esto:

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

Pero el problema es que cuando depurado y Ccanged los anchos de columna, este evento no incluso un incendio!

¿Por qué no se disparó?

¿Y cómo puedo hacer que se fijen los anchos de las columnas?

me hizo una nueva aplicación WinForm por si acaso si había algo mal en mi viejo, se disparó, pero sólo para la primera vez que ejecuta la aplicación .. aquí está el código:

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

aquí es el componente de inicialización si acaso es posible que quieras saber:

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

posible duplicado de [cómo arreglar el ancho de columna de una vista de lista en el formulario de Windows de C#?] (Http://stackoverflow.com/questions/2460308/how-to-fix-the-column-width- of-a-listview-in-c-sharp-windows-form) –

+0

se dispara. Intente asegurarse de que el evento se esté registrando correctamente. – nawfal

Respuesta

0

Puede marcar Better ListView Express. Hemos implementado la propiedad AllowResize en las columnas, que hace exactamente lo que necesita.

9

Debe registrarse el evento ColumnWidthChanging con su formulario:

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

Todavía no está encendiendo ... Hice exactamente lo que dijo .. – vexe

+0

¿Puede publicar su código? – XIVSolutions

+0

@XIVSoulutions Es exactamente igual a su código anterior. – vexe

0

Simplemente haga clic en los Propiedades >>Eventos >>ColumnWidthChanging.

enter image description here

A continuación, agregue este código:

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

feliz de codificación!^_^

+0

Me sorprende que cancelar no solo evite el cambiar de todos modos, ¿necesitas la segunda línea? – Bridge

+1

sí señor, al obtener el ** ancho ** actual de la columna listView y pasarlo como ** NewWidth **, SIEMPRE establecemos el ancho del ancho actual. Por cierto, ** BRIDGE **, es el nombre de la aplicación de mi programa actual ...^_^ – LoudSpeaker

+2

¡No se preocupe, no ha crecido, soy una persona! – Bridge

Cuestiones relacionadas