Не удается получить ComboBox для обновления / обновления - PullRequest
1 голос
/ 03 декабря 2011

У меня есть 2 формы, которые я назову Form1 и Form2.В Form1 есть следующий код:

public void PrinterDD()
{
    printer.Items.Clear();
    string sprinters = @"filepath";
    using (StreamReader reader = new StreamReader(sprinters))
        try
        {
            while (!reader.EndOfStream)
            {
                string strPrnItem = reader.ReadLine();
                MessageBox.Show(strPrnItem); //just here for troubleshooting purposes
                printer.Items.Add(strPrnItem);
            }
        }
        finally
        {
            reader.Close();
            printer.Update();
            printer.SelectedIndex = 0;
        }
}

Этот метод вызывается первым, когда загружается Form1.Поле со списком («принтер») заполнено правильно.

В Form2 у меня есть метод для записи в файл и изменения его:

private void accept_Click(object sender, EventArgs e)
{
    this.AcceptButton = accept;
    if (selectedprinters != null && selectedprinters.Items != null && selectedprinters.Items.Count > 0)
    {
        File.Delete(sprinters);
        StreamWriter writer = new StreamWriter(sprinters);
        try
        {
            foreach (object item in selectedprinters.Items)
            {
                writer.WriteLine(item.ToString());
            }
        }
        finally
        {
            writer.Close();
            Voicemails.PrinterDD();
        }                
    }
    this.Close();
}

Строка Voicemails.PrinterDD(); запускает методиз формы 1 выше.При пошаговом выполнении кода все работает нормально;без ошибок, текстовый файл записывается с новыми значениями.Но выпадающий список никогда не обновляется и не обновляется, чтобы показать новые строки.

Что я делаю не так?

РЕДАКТИРОВАТЬ.Я попытался printer.Refresh(); вместо printer.Update(); в коде Form1.

пс.Файл, который я использую, является текстовым файлом, поэтому я не думаю, что смогу связать с ним комбинированный список, поэтому я не думаю, что можно выполнить printer.DataSource = null, а затем повторно связать его.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2011

Попробуйте добавить это в начало метода PrinterDD ().

if (InvokeRequired)
{
   BeginInvoke(new NoParamDelegate(PrinterDD));
   return;
}

и добавьте:

delegate void NoParamDelegate(); 

как частная собственность.

0 голосов
/ 03 декабря 2011

Вам, вероятно, нужно вызвать метод Refresh

printer.Refresh();

. Вы можете использовать DataBinding для заполнения поля со списком:

List<string> source = new List<string>();
while (!reader.EndOfStream)
    source.Add(reader.ReadLine());

printer.DataSource = source;
printer.Refresh();
...