У меня проблема в форме, где я добавил столбцы в элемент управления .NET ListView в следующем порядке:
A | B | C | D
Индекс отображения для столбцов A-D равен 0-3, в этом порядке, но они отображаются в неправильном порядке:
A | B | D | C
^-----^ these are switched at runtime
Примечание. Все выглядит так, как я хочу, во время разработки.
Я думаю, но я не знаю, почему, потому что я добавил столбец C в ListView после того, как добавил столбец D. Я переместил его в диалоговом окне редактора столбцов, скорректировал индексы отображения и проверил порядок создания в файле .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";
Когда я добавил отсутствующие свойства непосредственно в файл, он работал.