Попробуй поймать - хорошая практика?Пользовательский ввод во время выполнения - PullRequest
0 голосов
/ 21 мая 2018

Этот вопрос основан на вопросе, который я задал 4 дня назад сложный, если оператор в тексте изменил событие .Я очень старался, чтобы проблема System.ArgumentOutOfRangeException не возникала.Проблема возникает из-за того, что оператор if находится в событии с измененным текстом и проверяет 8 символов, которые возникают во время выполнения.Таким образом, не все символы доступны сразу, но генерируются динамически с помощью ввода пользователя.Именно здесь начинается проблема: каждый раз, когда изменяется текст в текстовом поле, происходит событие, и в то же время программа сразу ожидает 8 символов и логически выдает сообщение об ошибке System.ArgumentOutOfRangeException.Чтобы справиться с этой проблемой, я поместил оператор if в блок try-catch.Теперь это работает, но это хорошая практика?Есть ли другие / лучшие решения?Вот выдержка из моего кода:

private void txtBoxEingabe_TextChanged(object sender, EventArgs e)
{
    axAcroPDF1.LoadFile("DONTEXISTS.pdf");

    radioButton1.Visible = false;
    radioButton2.Visible = false;

    string text = txtBoxEingabe.Text.Substring(0, txtBoxEingabe.TextLength);

    try
    {
        if (text.Substring(0, 3) == "SEH" && text.Substring(3, 1) == "M" && Convert.ToInt32(text.Substring(4, 4)) <= 2999 && (text.Substring(8, 1) == "H" || text.Substring(8, 1) == "R"))
        {
            radioButton1.Visible = true;
            radioButton2.Visible = true;

            radioButton1.Text = "1. Document";
            radioButton2.Text = "2. Document";

            this.radioButton1.CheckedChanged += RadioBtnChangedDC1;
            this.radioButton2.CheckedChanged += RadioBtnChangedDC1;
        }
    }
    catch 
    {

    }

private void RadioBtnChangedDC1(object sender, EventArgs e)
{
    if (radioButton1.Checked == true)
    {
        axAcroPDF1.LoadFile("C:\Doc1.pdf");
        axAcroPDF1.gotoFirstPage();
        Screensize = 100;
        axAcroPDF1.setZoom(Screensize);
        axAcroPDF1.setShowScrollbars(true);
        axAcroPDF1.setShowToolbar(false);
    }
    else if (radioButton2.Checked == true)
    {
        axAcroPDF1.LoadFile("C:\Doc2.pdf");
        axAcroPDF1.gotoFirstPage();
        Screensize = 100;
        axAcroPDF1.setZoom(Screensize);
        axAcroPDF1.setShowScrollbars(true);
        axAcroPDF1.setShowToolbar(false);
    }
}

Эта программа должна быть средством просмотра, которое показывает сотни нескольких документов.

1 Ответ

0 голосов
/ 21 мая 2018

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

Сделайте это вместо этого, и вам не нужно будет пытаться поймать его там.

if (txtBoxEingabe.Text.Length < 8)
    return;
...