.NET ListView 列顺序问题

标签 .net listview

我在表单中遇到问题,我已按以下顺序将列添加到 .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/

相关文章:

java - 如何右对齐ImageView

.net - 如果库面向 .NET Standard 2.0 是我使用 Visual Studio 2017 的唯一选择吗?

android - 如何让用户向 ListView 添加和删除项目?

.net - 为什么 NUnit 需要旧版本的框架?

c# - 有没有办法发现 Action<in T> 委托(delegate)实例的原始通用参数类型?

android - 如何在 Android 中保存和恢复 ListView 位置

android - 如何在 ListView 的展示 View 中制作矩形 View

android - 无法将数组列表中的数据显示到自定义 ArrayAdapter

c# - 如何将 XML/JSON 文件转换为 C# 类?

.net - 智能文件复制算法(与OS无关)