Отображение textBox.Text в Windows форме с "idx", повторяющим цикл for - PullRequest
0 голосов
/ 20 февраля 2020

Это мой первый C# проект. У меня есть два файла .cs, один из которых содержит все, что связано с GUI (Form1.cs), а другой - мою обработку (GMF.cs). Когда пользователь нажимает «Start» (a Button) на GUI, управление переходит к Form1.cs, который внутренне вызывает GMFMat (), присутствующий в файле GMF.cs.

В Form1.cs у меня есть:

private void button1_Click(object sender, EventArgs e) // Start Processing button clicked.
{
    GMF n = new GMF();
    func_out = n.GMFMat(inputs_GUI, this.progressBar1, this.textBox_imageNumber);
}

private void timer1_Tick(object sender, EventArgs e) // Increment Progress Bar
{
    progressBar1.Increment(1);
}

private void textBox_imageNumber_TextChanged(object sender, EventArgs e)
{
    this.Text = textBox_imageNumber.Text;
    Console.Write("Text = " + textBox_imageNumber.Text);
}

В GMF.cs у меня есть:

class GMF
{
public Tuple<string, int> GMFMat(in_params input_from_GUI, System.Windows.Forms.ProgressBar bar, System.Windows.Forms.TextBox textBox_ImgNumber) 
{
    double nth_file = 0;
    double num_files = 100
    foreach (string dir in dirs) // For our example, say 100 ierations
    {
        nth_file = nth_file + 1;
        textBox_ImgNumber.Text = nth_file.ToString();
        // Progress bar updates in each iteration, and I can see it as it progresses on the windows Form during execution. 
        bar_value_percent = nth_file / num_files * 100;
        bar.Value = int.Parse(Math.Truncate(bar_value_percent).ToString());
    }
}
}

Form1.cs [Design] имеет TextBox ( который я просто перетащил из панели инструментов). Я переименовал (Name) = textBox_imageNumber

  • Значение увеличивается на 1 каждый раз, когда оно входит в для l oop.
  • Основная цель c состоит в том, что я хочу, чтобы пользователь знал (отображать сообщение в приложении формы) каждый раз, когда для l oop завершается 1000 итераций.

Когда я запускаю приведенный выше код, я замечаю следующее:

  1. В окне консоли вывод такой, как ожидалось: Text = 1, Text = 2, ... Text = 100 как программа продолжается. - это показывает, что значение переменной в textBox_ImgNumber.Text обновляется внутри для l oop файла GMF.cs и достигает Form1.cs.

  2. Однако в форме значение во время выполнения программы в текстовом поле будет пустым (внутри для l oop). Как только он выйдет из func_out = n.GMFMat(inputs_GUI, this.progressBar1, this.textBox_imageNumber);, значение textBox будет отображаться как 100.

Я хочу, чтобы значение текстового поля в форме обновлялось как и когда для l oop повторяется (как я вижу в окне консоли). Как я могу это сделать?

Я использую Visual Studio, C# в Visual Studio 2010, NET Framework 4 Профиль клиента

Я знаю, что моя форма хорошо работает в отношении обработки и т. д. c, поскольку другие функции хорошо связаны между двумя файлами .cs.

Например, у меня также есть индикатор выполнения, прогресс которого я вижу, когда выполняется программа.

1 Ответ

0 голосов
/ 20 февраля 2020

Я нашел решение.

Мне пришлось включить строку: Application.DoEvents();

Итак, в Form1.cs:

private void textBox_imageNumber_TextChanged(object sender, EventArgs e)
{
     this.Text = textBox_imageNumber.Text;
     Console.Write("Text = " + textBox_imageNumber.Text);
     Application.DoEvents();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...