我在表单中遇到问题,我已按以下顺序将列添加到 .NET ListView 控件:
A | B | C | D
列 A-D 的显示索引是 0-3,按该顺序,但它们以错误的顺序显示:
A | B | D | C
^-----^ these are switched at runtime
注意:在设计时,一切看起来都是我想要的。
我想,但我不知道为什么,那是因为我在添加列 D 之后将列 C 添加到 ListView。我在列编辑器对话框中将其向上移动了一个档位,调整了显示索引,并检查了创建order 在 .Designer.cs 文件中,一切都按照 AD 的顺序。
然而问题依然存在。
另请注意:这不仅仅是标题标签问题,列会交换,包括它们的数据。数据按照我希望显示的顺序添加,但最后两列交换了。
我还需要检查什么才能弄清楚为什么我的一列位于错误的位置?
我解决了这个问题。出于某种原因,即使我在对话框中设置了 DisplayIndex 属性,也不会保留它。
如果我完全关闭了表单,然后在 Visual Studio 中重新打开它,它就会移动。显然,对话框编辑器没有将这些属性检测为“已更改”,因此保存机制也不关心为我保存它。
添加列的代码是这样的:
this.lvResult = new System.Windows.Forms.ListView();
this.colResultId = new System.Windows.Forms.ColumnHeader();
this.colResultTitle = new System.Windows.Forms.ColumnHeader();
this.colResultLanguage = new System.Windows.Forms.ColumnHeader();
this.colResultTags = new System.Windows.Forms.ColumnHeader();
//
// lvResult
//
this.lvResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lvResult.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.colResultId,
this.colResultTitle,
this.colResultLanguage,
this.colResultTags});
this.lvResult.FullRowSelect = true;
this.lvResult.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lvResult.HideSelection = false;
this.lvResult.Location = new System.Drawing.Point(12, 6);
this.lvResult.Name = "lvResult";
this.lvResult.Size = new System.Drawing.Size(466, 117);
this.lvResult.TabIndex = 0;
this.lvResult.UseCompatibleStateImageBehavior = false;
this.lvResult.View = System.Windows.Forms.View.Details;
this.lvResult.SelectedIndexChanged += new System.EventHandler(this.lvResult_SelectedIndexChanged);
//
// colResultId
//
this.colResultId.Text = "#";
this.colResultId.Width = 35;
//
// colResultTitle
//
this.colResultTitle.Text = "Title";
this.colResultTitle.Width = 220;
//
// colResultTags
//
this.colResultTags.DisplayIndex = 2;
this.colResultTags.Text = "Tags";
this.colResultTags.Width = 100;
//
// colResultLanguage
//
this.colResultLanguage.Text = "Language";
当我直接在文件中添加缺少的属性时,它起作用了。
最佳答案
是否可能将某些内容保留到表单的 .resx 而不是 .designer?我无法想象它为什么会那样做,但是是的...
也许如果所有其他方法都失败了,请尝试从表单中删除 ListView。然后,在您的项目中创建一个新的垃圾表单,在垃圾表单上重新创建 ListView,测试垃圾表单以确保您没有得到奇怪的伏都教行为,然后将垃圾表单中的 ListView 复制回您的真实表单?
太复杂了,我知道...
关于.NET ListView 列顺序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2225001/