Prevent column resizing in ListView for users?

I have a ListView In My Winform that has 4 columns, name, money, id and level.

The problem is that when I run my application, I still have the ability to bind to the widths of the columns and change them.

I searched And found that I should do something like this:

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

But the problem is that when I debugged and changed the width of the columns, this event did not even fire!

Why didn't he shoot?

And how can I make the column widths fixed?

I made a new winform application in case something is wrong in my old one, it starts, but only for the first time it starts the application .. here the code:

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

here is the initialization component just in case you want to know:

 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); } 
+6
source share
3 answers

You can check out the Better ListView Express . We have implemented the AllowResize property in the columns, which does exactly what you need.

0
source

You need to register the ColumnWidthChanging event in the form:

 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; } } 
+9
source

Just click Properties -> Events - > ColumnWidthChanging .

enter image description here

Then add this code:

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

Happy coding! ^ _ ^

0
source

Source: https://habr.com/ru/post/921337/


All Articles