Получить столбец элементов Listview и отобразить в поле со списком в другой форме c # - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть 2 формы: 1 форма содержит listView, а другая форма содержит comboBox.

Я бы хотел, чтобы первый столбец listView был загружен в comboBox на второй форме.

Это моя попытка:

comboBox1.Items.Add(Form2.listView2.columnHeader1);

Однако это не работает.(Form2.ListView недоступен из-за уровня защиты).Предложения будут оценены.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Быстрое и грязное решение:

Перейдите к Properties из listView2 в конструкторе winforms и найдите Modifiers. Затем выберите Public, как вы видите на картинке ниже:

enter image description here

А теперь это будет доступно

Более элегантное решение:

Создайте свойство в первой форме, в котором есть только геттер. В этом геттере вы можете безопасно вернуть columnHeader1:

public ColumnHeader ColumnHeader { get { return this.listView1.Columns["columnHeader1"]; }}

или

public ColumnHeader ColumnHeader { get { return this.columnHeader1; }}

EDIT:

Похоже, вы бы предпочли иметь все значения из этого столбца. Так что в этом случае вам придется вернуть все значения, что можно сделать так:

public List<string> AlllValuesFromColumn
{
    get
    {
        int indexOfColumn = listView2.Columns.IndexOf(this.columnHeader1);
        return listView2.Items.OfType<ListViewItem>().Select(x => x.SubItems[indexOfColumn].Text).ToList();
    }
}

Чтобы добавить все значения одним ударом к ComboBox, вы можете использовать AddRange :

comboBox1.Items.AddRange(Form2.AlllValuesFromColumn.ToArray());

РЕДАКТИРОВАТЬ 2:

Но решение, которое я лично предпочел бы, это хранить источник данных в дополнительной переменной. Это можно обойти. Там нет магии.

0 голосов
/ 12 сентября 2018

Создайте публичный метод во второй форме и дайте методу установить комбо-элементы.

Form1:

bool Do = true;
int i = 0;
Form2 F = new Form2();

while (Do)
{
    try
    {
        F.AddItem(listView1.Columns[i].Name);
        i++;
    }

    catch
    {
        Do = false;
    }
}

Form2:

public void AddItem(string ToAdd)
{
    comboBox1.Items.Add(ToAdd);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...