andrew898701 Ответов: 1

Messagebox.show строки, кажется, изменяет строку


Привет,

Я пишу код для исправления ошибки в цифровом сканере, который иногда читает 2 как ">".

Если сканер содержит этот неправильный символ, то будет выполнен приведенный ниже код:


if ((string)row.Cells[1].Value != txtScannedIn.Text.Trim())
                {
                    string editedtext;
                    editedtext = ScanFix(txtScannedIn.Text, (string)row.Cells[1].Value);
                    txtScannedIn.Text = editedtext;
                    
                }


Метод, который он использует для исправления кода, заключается в следующем:

private string ScanFix(string NotFound, string rightpart)
        {
            string replacer;
            if (NotFound.Contains('>'))
            {
                replacer = NotFound.Replace('>', '2');
                if (replacer == rightpart)
                {
                    MessageBox.Show(replacer + " " + rightpart);
                    return replacer;
                }
                else return NotFound;
            }
            else
            {
                return NotFound;
            }
            
        }


Эти два сегмента кода работают точно так, как они должны работать при выполнении таким образом, однако когда я пытаюсь заставить первый блок кода отображать MessageBox с обновленной строкой "editedtext", messagebox отображает исходное неверное сканирование с ">" в нем.

if ((string)row.Cells[1].Value != txtScannedIn.Text.Trim())
                {
                    string editedtext;
                    editedtext = ScanFix(txtScannedIn.Text, (string)row.Cells[1].Value);
                    MessageBox.Show(editedtext); //this displays the originally wrong scan with the ">" instead of the corrected 2. Without this single MessageBox line the code runs properly and the > is replaced. 

txtScannedIn.Text = editedtext;
                    
                }


Что я уже пробовал:

Я попытался создать отдельную переменную, чтобы установить строку editedtext равной, а затем отобразить ее (если она работает, когда я объявляю txtScannedIn.Почему бы ему не разрешить использовать эту переменную?), и я вставил команды MessageBox в другие области кода, чтобы определить, выполняются ли они (насколько я понимаю, включая этот messagebox вне метода ScanFix, он изменяет его, чтобы вернуть исходное значение NotFound).

Одна вещь, которая действительно позволяла messagebox отображать правильную строку scan/ editedtext для правильного обновления, заключалась в том, что окно сообщения

Ящик для сообщений.Show(editedtext = ScanFix(txtScannedIn.Text, (string)row.Ячейки[1].Значение));

Я никогда не использовал этот форум, но я не могу найти ни одного документированного случая этой проблемы, и ничто из того, что я пробовал, не позволяет Messagebox просто отображать возврат фиксированного сканирования правильным образом. Если кто-нибудь увидит это и знает, как это исправить, я буду очень признателен вам за помощь.

Спасибо

1 Ответов

Рейтинг:
9

phil.o

Поставьте точку останова на линии

editedtext = ScanFix(txtScannedIn.Text, (string)row.Cells[1].Value);
затем нажмите клавишу F5 и дождитесь достижения точки останова. Оказавшись в сеансе отладки, начните отладку построчно, чтобы выяснить, почему editedtext переменная не получает того значения, которое вы ожидали.

Отладка-это очень полезный, а не необязательный навык для разработчика. Я даже нахожу это довольно отвлекающим. Ты должен попробовать это сделать :)


andrew898701

Привет,

Спасибо за ответ.

Я попытался использовать точку останова, чтобы прочитать, что переменная "edittext" была определена как внутри этой строки и строк после нее. В сценариях, где код работает или не работает, переменная "edittext" по-прежнему определяется как неверный вход сканирования внутри и после этой строки. Есть идеи, почему он может читать неправильную строку, но передавать правильную//советы о том, как более эффективно использовать функцию "точка останова"? (Я новичок в кодировании и ссылаюсь на онлайн-источники, чтобы понять это, но любая помощь приветствуется).

Спасибо

andrew898701

Привет,

Я смог понять это - оказывается, он работал, и messagebox был из кода, циклически проходящего через остальную часть datagridview - спасибо за помощь!

phil.o

Пожалуйста.

phil.o

Проблема, по-видимому, в том, что ScanFix затем вы должны отладить этот метод и посмотреть, как он дает неправильные результаты.
Следуя совету в моем решении, как только точка останова будет достигнута, нажмите клавишу F11, и вы сможете отладить код внутри неисправного метода.
Вот введение в отладку:
Учебник: научитесь отлаживать код C# с помощью Visual Studio[^]
Вы можете найти много других источников по этому вопросу, используя свою любимую поисковую систему.

BillWoodruff

+5