У меня есть проблема в форме, где я добавил столбцы к.NET управление ListView в следующем порядке:
A | B | C | D
Индекс дисплея для столбцов A-D 0-3 в том порядке, все же они отображаются в неправильном порядке:
A | B | D | C
^-----^ these are switched at runtime
Примечание: Все смотрит, поскольку я хочу это во время проектирования.
Я предполагаю, но я не знаю, почему, который это - потому что я добавил столбец C к ListView после того, как я добавил столбец D. Я переместил его на ступеньку выше в редактора столбца диалоговое окно, скорректировал индексы дисплея и проверил порядок создания в.Designer.cs файл, все в порядке A-D в тот порядок.
Все же проблема сохраняется.
Также примечание: Это не просто направляющаяся проблема маркировки, столбцы подкачиваются вокруг, включая их данные. Данные добавляются в порядке, я ожидаю, что это будет отображено, но последние два столбца подкачиваются.
Что еще я должен проверить для выяснения, почему один из моих столбцов находится в неправильном положении?
Я выяснил проблему. По некоторым причинам свойство 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 с нерабочей формы обратно на вашу настоящую форму?
Ужасно запутанно, я знаю...
Есть способ сделать это: переместить код времени разработки, сгенерированный для ListView, и его столбцы, а затем поместить их в метод ... см. Здесь пример.
public Mainform(){ InitializeComponent(); // InitListView(); } public void InitListView(){ // Design time generated code and manually add it here. }
Это дерьмовый способ справиться со странным проблемы во время разработки ... единственная загвоздка в том, что если вы хотите добавить еще один столбец, вы не увидите его во время разработки ...
Надеюсь, это поможет, С уважением, {{1} }Том.