c # winforms читает элементы списка со списком один за другим - PullRequest
0 голосов
/ 16 октября 2018

Позвольте мне дать вам быстрый обзор моей работы.Я работаю над winforms.

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

Что я сделал:

private void ExtrctBtn_Click(object sender, EventArgs e)
    {
        //I have another button to select file
        string sourceFile = "", resultFile = "";

        if (sourceFile == null || !(File.Exists(sourceFile)))
        {
            MessageBox.Show("Please select a file to continue", "File Error");
        }
        else
        {
            sw = Stopwatch.StartNew();      //start the timer
            ExtrctBtn.Enabled = false;

            resultFile = Path.Combine(Path.GetDirectoryName(sourceFile), "Results_" + DateTime.Now.ToString("yyMMddHHmmss") + ".txt");
            WriteReport(resultFile);
            sw.Stop();              //stop the timer
        }

private void WriteReport(string dest)
    {
        try
        {
            int n = 0;
            string key = "";
            string[] keys = new string[10];

            Found:
            key = CmboBox.SelectedItem.ToString();
            if (!keys.Contains(key))
            {
                //copy the required data from source file to result file

                if (n < keys.Length)
                    keys[n++] = key;

                DialogResult dialogResult = MessageBox.Show("Select next key", "Continue?", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    goto Found;
                }
                else //if (dialogResult == DialogResult.No)
                {
                    goto Finish;
                }
            }
            else
            {
                MessageBox.Show("You have already added this Key","Error");
            }

            Finish:
            SaveFile();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString(), "Exception");
        }
   }

Все работает нормально. Что я не могу сделать : после выбора 1-го элемента в выпадающем списке и выполнения операции копирования-вставки я не могу выбрать следующие элементы.Он просто переходит на Found и выдает сообщение об ошибке.Я не хочу автоматически выбирать элементы списка.Скорее, я хочу подождать, пока пользователь не выберет другую клавишу из выпадающего списка и на основе выбора клавиши, извлечь следующий абзац .

Я понимаю, что что-то упустил.Но я не знаю что! Что я должен сделать, чтобы пользователь мог выбирать другие элементы списка, когда я нажимаю да в окне сообщения? Я могу использовать концепцию Threading и использовать Sleep (), чтобы подождать несколько секунд для пользователявход, но я не думаю, что это осуществимо.

У кого-нибудь есть другая идея?Любая помощь приветствуется.заранее спасибо.

1 Ответ

0 голосов
/ 16 октября 2018

(учитывая ваш код) для этого вы должны изменить выбранный элемент после прочтения:

key = CmboBox.SelectedItem.ToString();
if(CmboBox.SelectedIndex < ComboBox.Items.Length -1)
      CmboBox.SelectedIndex;

Но, однако, не очень хорошая идея использовать CmboBox.SelectedItem и менять его один за другим, чтобы получить егоПредметы.Вы можете просто пройтись по всем пунктам.простой цикл for будет лучшим вариантом, хотя возможны и другие способы, такие как Linq, ...

for(int i=0; i<ComboBox.Items.Length;i++)
{
     key = ComboBox.Items[i].ToString();
     //rest of your code
}

Обновление С учетом вашего комментария:

DialogResult current = DialogResult.No;
do
{
    key = CmboBox.SelectedItem.ToString();
    DialogResult dialogResult = MessageBox.Show("Select next key", "Continue?", MessageBoxButtons.YesNo);
    if (!keys.Contains(key))
    {
         if (n < keys.Length)
              keys[n++] = key;
    }
    else
    {
        MessageBox.Show("You have already added this Key","Error");
    }
}while(dialogResult == DialogResult.Yes);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...