У меня проблема с обновлением моего ComboBox, как только я вспоминаю заполненный ComboBox, я получаю все дубликаты - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь обновить свой ComboBox, как только я сделал новый файл Capture с данными в нем. Если я закрою форму и снова открою ее, она, очевидно, обновится, но это кажется дешевым способом ее программирования. (Чтобы быстро закрыть форму и открыть новую) До сих пор, когда я вспоминаю способ пополнения ComboBox, он, кажется, включает в себя существующие данные и печатает все.

Мой код на данный момент:

Как только загрузка формы будет выполнена:

    private void FormCapSave_Load(object sender, EventArgs e)
    {
        DirectoryInfo(@"C:\Users\pc\Documents\textfolder");
        FileInfo[] Files = d.GetFiles("*.cap");
        foreach (FileInfo file in Files)
        {
            if (!comboBoxSaveCap.Items.Contains(file))
            {
                comboBoxSaveCap.Items.Add(file.ToString());
            }
        }

Далее следует кнопка для добавления нового файла Cap:

    private void buttonFormSaveAdd_Click(object sender, EventArgs e)
    {
        Form1.AfterNamingCapFile();
        if (Program.MainForm.boolSave == false)
        {
            labelFormSaveException.ForeColor = Color.Tomato;
            labelFormSaveException.Text = "Cap exists";
        }
        else
        {
            labelFormSaveException.ForeColor = Color.Green;
            labelFormSaveException.Text = "Cap file added";
            ResetForm();
        }
    }

My ResetForm (); в основном это копия первого метода при загрузке:

    private void ResetForm()
    {
        DirectoryInfo(@"C:\Users\pc\Documents\textfolder");
        FileInfo[] Files = d.GetFiles("*.cap");
        foreach (FileInfo file in Files)
        {
            if (!comboBoxSaveCap.Items.Contains(file))
            {
                comboBoxSaveCap.Items.Add(file.ToString());
            }
        }
    }

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

Перед повторным заполнением необходимо очистить содержимое поля со списком.

    private void ResetForm()
    {
        DirectoryInfo d = new 
        DirectoryInfo(@"C:\Users\pc\Documents\textfolder");
        FileInfo[] Files = d.GetFiles("*.cap");
        comboBoxSaveCap.Items.Clear(); // Missing this bit
        foreach (FileInfo file in Files)
        {
            if (!comboBoxSaveCap.Items.Contains(file))
            {
                comboBoxSaveCap.Items.Add(file.ToString());
            }
        }
    }
0 голосов
/ 29 мая 2019

Вы должны очистить коллекцию Items, но вы также можете удалить весь цикл, необходимый для добавления элементов один за другим, если вы используете свойство DataSource. Это имеет побочное преимущество, позволяющее вам получить полную FileInfo, когда вы смотрите на свойство SelectedItem

private void ResetForm()
{
    string path = @"C:\Users\pc\Documents\textfolder";
    comboBoxSaveCap.DataSource = null; // Clear the previous content
    comboBoxSaveCap.DataSource = new DirectoryInfo(path).GetFiles("*.cap");
}

void comboBoxSaveCap_SelectedIndexChanged(object sender, EventArgs e)
{
    var f = comboBoxSaveCap.SelectedItem as FileInfo;
    if(f != null)
    { 
        Console.WriteLine(f.FullName);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...