.NET проблема порядка столбцов ListView

У меня есть проблема в форме, где я добавил столбцы к.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";

Когда я добавил недостающие свойства непосредственно в файле, он работал.

12
задан Lasse V. Karlsen 8 February 2010 в 22:00
поделиться

2 ответа

Возможно, это персистирование чего-то в .resx формы вместо .designer? Я не могу представить, почему он это делает, но да...

Может быть, если все остальное не удается, попробуйте удалить ListView из вашей формы. Затем создайте новую нерабочую форму в вашем проекте, воссоздав ListView на нерабочей форме, протестируйте нерабочую форму, чтобы убедиться, что вы не получаете странного поведения вуду, а затем скопируйте ListView с нерабочей формы обратно на вашу настоящую форму?

Ужасно запутанно, я знаю...

5
ответ дан 2 December 2019 в 22:05
поделиться

Есть способ сделать это: переместить код времени разработки, сгенерированный для ListView, и его столбцы, а затем поместить их в метод ... см. Здесь пример.

public Mainform(){
    InitializeComponent();
    //
    InitListView();
}

public void InitListView(){
    // Design time generated code and manually add it here.
}

Это дерьмовый способ справиться со странным проблемы во время разработки ... единственная загвоздка в том, что если вы хотите добавить еще один столбец, вы не увидите его во время разработки ...

Надеюсь, это поможет, С уважением, {{1} }Том.

1
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: