Primo Chalice Ответов: 1

Как я могу обрабатывать исключения в C#?


Привет,

Я написал программу на C# и сообщаю вам об ошибке.

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

Итак, у меня есть PictureBox_MouseDown, где он показывает мне следующую ошибку:
'Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index'


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

Пожалуйста помочь.

С уважением
Аман Чаурасия

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

if (PictureBox1.Image != null)
            {
                if (ZonesItems != null)
                {
                    if (ZoneCreationOnProcess == true)
                    {

                        bool FalseZoneCreated = false;
                        if (ZonesItems[LastZoneCount].ZoneArea.Height <= 1)
                        {
                            ZonesItems.Remove(ZonesItems[LastZoneCount]);
                            FalseZoneCreated = true;
                        }
                        else if (ZonesItems[LastZoneCount].ZoneArea.Width <= 1)
                        {
                            ZonesItems.Remove(ZonesItems[LastZoneCount]);
                            FalseZoneCreated = true;
                        }
                        if (FalseZoneCreated == false)
                        {
                            if (ZonesItems[LastZoneCount].ZoneCssIdentity == "article-full-headline")
                            {
                                if (pdfArticlePageIndex != pdfPageIndex)
                                {
                                    pdfArticleIndex = 0;
                                    pdfArticlePageIndex = pdfPageIndex;
                                }
                                pdfArticleIndex = pdfArticleIndex + 1;
                                ToolStripArticleNo.Text = pdfArticleIndex.ToString();

                            }
                            else if (ZonesItems[LastZoneCount].ZoneCssIdentity == "article-in-image")
                            {
                                pdfPageImageIndex = pdfPageImageIndex + 1;
                            }
                            ZonesItems[LastZoneCount].ArticleNo = pdfArticleIndex;
                            LastZoneCount = LastZoneCount + 1;
                            if (LastZone == ZoneName.TextArea)
                            {
                                LastTextAreaCount = LastTextAreaCount + 1;
                            }
                            else if (LastZone == ZoneName.ImageArea)
                            {
                                LastImageAreaCount = LastImageAreaCount + 1;
                            }
                            else if (LastZone == ZoneName.TableArea)
                            {
                                LastTableAreaCount = LastTableAreaCount + 1;
                            }

                        }

                    }
                    else
                    {
                        if (ZoneSelected == true)
                        {
                            if (SelectedZoneCount != 0)
                            {

                            }
                            else
                            {

                            }
                        }
                        else
                        {

                        }
                    }
                }
                else
                {

                }
            }
        }


Жирный синтаксис-это то, где я получаю ошибку.

F-ES Sitecore

Прежде чем обращаться к элементу в массиве, вы должны проверить, что массив содержит необходимое количество элементов. Если у меня есть трехэлементный массив

a[0] = "a"
a[1] = "b"
a[2] = "c"

и я прошу о четвертом элементе

строка x = a[3]

это вызовет исключение, которое вы видите, поскольку четвертого элемента нет. Поэтому вам нужно проверить размер вашего массива, прежде чем обращаться к элементам внутри него.

if (LastZoneCount >= ZonesItems.Длина)
{
// попытка получить доступ к элементу, который действительно существует
}

То, что вы там делаете, зависит от вашей бизнес-логики. Вы можете просто захотеть "вернуться", чтобы прервать процесс, вы можете показать предупреждение, мы не знаем.

Primo Chalice

Предупреждение необходимо, так как любой человек может случайно щелкнуть правой кнопкой мыши. Так что аборт-это глупость, я думаю. Как мне это осуществить? Пожалуйста помочь.

Richard MacCutchan

Либо проверьте свои значения индекса, прежде чем использовать их, либо используйте блок try/catch. Это ваша ответственность, как застройщика, чтобы удостовериться, что введенные пользователем данные проверяются, прежде чем использовать его.

1 Ответов

Рейтинг:
2

OriginalGriff

Цитата:
Предупреждение необходимо, так как любой человек может случайно щелкнуть правой кнопкой мыши. Так что аборт-это глупость, я думаю. Как мне это осуществить? Пожалуйста помочь.
Мы не можем - первое, что вам нужно сделать, это использовать отладчик, чтобы точно узнать, что находится в индексе массива и почему он туда попал. Поместите точку останова на линию, создающую исключение, и посмотрите на переменные, когда она попадает. Подумайте о том, что вы ожидали там увидеть, и что вы на самом деле получили. Почему они такие разные? Как эта ценность туда попала?

Если это ошибка пользователя, то проверьте ее и отобразите соответствующую ошибку с помощью MessageBox. Если это не так, то начните отслеживать, как ценность попала туда, и выясните, что вам нужно сделать, чтобы предотвратить это снова.

Извините, но мы не можем сделать это для вас!