我在表单中遇到问题,我按以下顺序将列添加到.NET ListView控件:
A | B | C | D
Run Code Online (Sandbox Code Playgroud)
AD列的显示索引按顺序为0-3,但它们显示的顺序错误:
A | B | D | C
^-----^ these are switched at runtime
Run Code Online (Sandbox Code Playgroud)
注意:在设计时,一切看起来都像我想要的那样.
我猜,但我不知道为什么,这是因为我在添加了列D之后将列C添加到ListView.我在列编辑器对话框中将其移动了一个档位,调整了显示索引,并检查了创建在.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";
Run Code Online (Sandbox Code Playgroud)
当我直接在文件中添加缺少的属性时,它工作.
小智 6
我使用Visual Studio 2010时遇到了这个问题.当我查看设计器生成的代码时,它只为部分列设置了DisplayIndex.在设计时,列的顺序正确,但在运行时它们的顺序不同.当我添加我的列时,他们仍然有设计器生成的名称,例如ColumnHeader1等.当我将它们重命名为更有意义的名称并运行我的应用程序时,运行时列顺序是正确的.我查看了设计器生成的代码,发现它重新排序了列创建代码并删除了所有DisplayIndex值(因为它们不需要)
它可能是持久的形式的.resx而不是.designer吗?我无法想象为什么会这样做,但是......
也许如果其他所有方法都失败了,请尝试从表单中删除ListView.然后,在您的项目中创建一个新的垃圾表单,在垃圾表单上重新创建ListView,测试垃圾表单以确保您没有得到奇怪的巫毒行为,然后将ListView从垃圾表单复制回您的真实表单?
非常复杂,我知道......
| 归档时间: |
|
| 查看次数: |
4748 次 |
| 最近记录: |