Как я могу обрабатывать исключения в 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. Это ваша ответственность, как застройщика, чтобы удостовериться, что введенные пользователем данные проверяются, прежде чем использовать его.