В списке событийBox1_SelectedIndexChanged почему переменная внутри равна нулю? ⇐ C#
В списке событийBox1_SelectedIndexChanged почему переменная внутри равна нулю?
В моем коде я использую мышь для рисования прямоугольника, а затем, когда заканчиваю рисование и отпускаю мышь, она переходит к событию selectedindexchanged и выдает нулевое исключение.
Переменная oy имеет значение null. и я проверил, что listBox1 не имеет значения NULL, а SelectedItem также не имеет значения NULL.
private void listBox1_SelectedIndexChanged (отправитель объекта, EventArgs e) { вар ой = listBox1.SelectedItem как MyListBoxItem; вар вал = ой.Сообщение; } это класс MyListBoxItem:
const stringockFileContents = @"[ { ""ItemColor"": ""Синий"", ""Message"": ""Синий предмет"" }, { ""ItemColor"": ""Зеленый"", ""Сообщение"": ""Зеленый предмет"" }, { ""ItemColor"": ""Красный"", ""Message"": ""Красный предмет"" } ]"; публичный класс MyListBoxItem { общественный цвет ItemColor {get; набор; } общественная строка Сообщение {получить; набор; } } это конструктор:
публичный частичный класс Form1: Форма { BindingList MyItems {get; } = новый BindingList(); Прямоугольник прямоугольник; int пикселейCounter = 0; Выбранный ЦветЦвет = Цвет.Светло-Зеленый; List DrawingRects = новый List(); Растровое изображение rectImage; int saveRectanglesCounter = 1; bool drawBorder = true; Bool ClearRectangles = правда; bool saveRectangles = true; строка «Имя прямоугольника»; Словарь FileList = новый словарь(); строка выбранныйПуть; интервал х, у; частный bool урожай = ложь; общедоступная форма1() { ИнициализироватьКомпонент(); textBox1.Text = Свойства.Настройки.По умолчанию.ImageToCropFolder; textBox2.Текст = Свойства.Настройки.По умолчанию.ПапкаОбрезанныхИзображений; выбранныйПуть = textBox2.Text; если (textBox1.Text != "") { Растровое изображение bmp = новое растровое изображение(Image.FromFile(textBox1.Text), PictureBox2.Width, PictureBox2.Height); PictureBox2.Image = BMP; } checkBoxDrawBorder.Checked = true; checkBoxClearRectangles.Checked = true; checkBoxSaveRectangles.Checked = true; if (selectedPath != "" && selectedPath != null) { если (System.IO.File.Exists(Path.Combine(selectedPath, "rectangles.txt"))) { строка g = System.IO.File.ReadAllText(Path.Combine(selectedPath, "rectangles.txt")); г = г.Удалить(0, 32); FileList = JsonConvert.DeserializeObject(g);; for(int i = 0; i < FileList.LongCount(); i++) { MyItems.Add(новый MyListBoxItem { Сообщение = FileList.Keys.ElementAt(i) + "," + FileList.Values.ElementAt(i), Цвет элемента = Цвет.Зеленый }); } label2.Text = listBox1.Items.Count.ToString(); listBox1.SelectedIndex = listBox1.Items.Count - 1; } еще { label2.Text = "0"; } } еще { label2.Text = "0"; } if ((selectedPath != "" && selectedPath != null) && textBox1.Text != "") { урожай = правда; } еще { урожай = ложь; } } Это код событий OnLoad MouseDown MouseMove MouseUp:
защищенное переопределение void OnLoad(EventArgs e) { base.OnLoad(е); listBox1.DisplayMember = nameof(MyListBoxItem.Message); listBox1.DataSource = МоиЭлементы; listBox1.DrawMode = DrawMode.OwnerDrawFixed; listBox1.SelectedIndexChanged += (отправитель, ee) => listBox1.Refresh(); } Private void imageBox2_MouseDown (отправитель объекта, MouseEventArgs e) { if (e.Button != MouseButtons.Left || обрезка == false) return; х = 0; у = 0; if (pictureBox2.Image != null && selectedPath != null) { if ((x >= 0 && x = 0 && y = 0 && X = 0 && Y 0) { if ((x >= 0 && x = 0 && y 0 && imageBox2.Image != null && selectedPath != "") { if ((x >= 0 && x = 0 && y 0 && dr.Rect.Height > 0) { rectImage =cropAtRect((Bitmap)pictureBox2.Image, dr.Rect); если (сохранить прямоугольники) { считать++; прямоугольникИмя = GetNextName(Путь.Объединить(выбранныйПуть, "Прямоугольник"), ".bmp"); FileList.Add($"{dr.Location}, {dr.Size}", прямоугольникИмя); строка json = JsonConvert.SerializeObject( список файлов, Форматирование. С отступом ); используя (StreamWriter sw = новый StreamWriter(Path.Combine(selectedPath, "rectangles.txt"), false)) { sw.WriteLine("Общее количество прямоугольников: " + count + Environment.NewLine); sw.Write(JSON); SW.Закрыть(); } rectImage.Save(имяпрямоугольника); saveRectanglesCounter++; } еще { поток вар = ToMemoryStream (rectImage); вар изображение = System.Drawing.Image.FromStream(поток); PictureBox1.Image = изображение; } пикселейCounter = rect.Width * rect.Height; PictureBox1.Invalidate(); listBox1.DataSource = FileList.Keys.ToList(); listBox1.SelectedIndex = listBox1.Items.Count - 1; картинкаBox2.Фокус(); Графика g = Graphics.FromImage(this.pictureBox1.Image); g.Clear(this.pictureBox1.BackColor); } } еще { если (clearRectangles) { РисованиеРекты.Очистить(); PictureBox2.Invalidate(); } х = 0; у = 0; } } }
В моем коде я использую мышь для рисования прямоугольника, а затем, когда заканчиваю рисование и отпускаю мышь, она переходит к событию selectedindexchanged и выдает нулевое исключение.
Переменная oy имеет значение null. и я проверил, что listBox1 не имеет значения NULL, а SelectedItem также не имеет значения NULL.
private void listBox1_SelectedIndexChanged (отправитель объекта, EventArgs e) { вар ой = listBox1.SelectedItem как MyListBoxItem; вар вал = ой.Сообщение; } это класс MyListBoxItem:
const stringockFileContents = @"[ { ""ItemColor"": ""Синий"", ""Message"": ""Синий предмет"" }, { ""ItemColor"": ""Зеленый"", ""Сообщение"": ""Зеленый предмет"" }, { ""ItemColor"": ""Красный"", ""Message"": ""Красный предмет"" } ]"; публичный класс MyListBoxItem { общественный цвет ItemColor {get; набор; } общественная строка Сообщение {получить; набор; } } это конструктор:
публичный частичный класс Form1: Форма { BindingList MyItems {get; } = новый BindingList(); Прямоугольник прямоугольник; int пикселейCounter = 0; Выбранный ЦветЦвет = Цвет.Светло-Зеленый; List DrawingRects = новый List(); Растровое изображение rectImage; int saveRectanglesCounter = 1; bool drawBorder = true; Bool ClearRectangles = правда; bool saveRectangles = true; строка «Имя прямоугольника»; Словарь FileList = новый словарь(); строка выбранныйПуть; интервал х, у; частный bool урожай = ложь; общедоступная форма1() { ИнициализироватьКомпонент(); textBox1.Text = Свойства.Настройки.По умолчанию.ImageToCropFolder; textBox2.Текст = Свойства.Настройки.По умолчанию.ПапкаОбрезанныхИзображений; выбранныйПуть = textBox2.Text; если (textBox1.Text != "") { Растровое изображение bmp = новое растровое изображение(Image.FromFile(textBox1.Text), PictureBox2.Width, PictureBox2.Height); PictureBox2.Image = BMP; } checkBoxDrawBorder.Checked = true; checkBoxClearRectangles.Checked = true; checkBoxSaveRectangles.Checked = true; if (selectedPath != "" && selectedPath != null) { если (System.IO.File.Exists(Path.Combine(selectedPath, "rectangles.txt"))) { строка g = System.IO.File.ReadAllText(Path.Combine(selectedPath, "rectangles.txt")); г = г.Удалить(0, 32); FileList = JsonConvert.DeserializeObject(g);; for(int i = 0; i < FileList.LongCount(); i++) { MyItems.Add(новый MyListBoxItem { Сообщение = FileList.Keys.ElementAt(i) + "," + FileList.Values.ElementAt(i), Цвет элемента = Цвет.Зеленый }); } label2.Text = listBox1.Items.Count.ToString(); listBox1.SelectedIndex = listBox1.Items.Count - 1; } еще { label2.Text = "0"; } } еще { label2.Text = "0"; } if ((selectedPath != "" && selectedPath != null) && textBox1.Text != "") { урожай = правда; } еще { урожай = ложь; } } Это код событий OnLoad MouseDown MouseMove MouseUp:
защищенное переопределение void OnLoad(EventArgs e) { base.OnLoad(е); listBox1.DisplayMember = nameof(MyListBoxItem.Message); listBox1.DataSource = МоиЭлементы; listBox1.DrawMode = DrawMode.OwnerDrawFixed; listBox1.SelectedIndexChanged += (отправитель, ee) => listBox1.Refresh(); } Private void imageBox2_MouseDown (отправитель объекта, MouseEventArgs e) { if (e.Button != MouseButtons.Left || обрезка == false) return; х = 0; у = 0; if (pictureBox2.Image != null && selectedPath != null) { if ((x >= 0 && x = 0 && y = 0 && X = 0 && Y 0) { if ((x >= 0 && x = 0 && y 0 && imageBox2.Image != null && selectedPath != "") { if ((x >= 0 && x = 0 && y 0 && dr.Rect.Height > 0) { rectImage =cropAtRect((Bitmap)pictureBox2.Image, dr.Rect); если (сохранить прямоугольники) { считать++; прямоугольникИмя = GetNextName(Путь.Объединить(выбранныйПуть, "Прямоугольник"), ".bmp"); FileList.Add($"{dr.Location}, {dr.Size}", прямоугольникИмя); строка json = JsonConvert.SerializeObject( список файлов, Форматирование. С отступом ); используя (StreamWriter sw = новый StreamWriter(Path.Combine(selectedPath, "rectangles.txt"), false)) { sw.WriteLine("Общее количество прямоугольников: " + count + Environment.NewLine); sw.Write(JSON); SW.Закрыть(); } rectImage.Save(имяпрямоугольника); saveRectanglesCounter++; } еще { поток вар = ToMemoryStream (rectImage); вар изображение = System.Drawing.Image.FromStream(поток); PictureBox1.Image = изображение; } пикселейCounter = rect.Width * rect.Height; PictureBox1.Invalidate(); listBox1.DataSource = FileList.Keys.ToList(); listBox1.SelectedIndex = listBox1.Items.Count - 1; картинкаBox2.Фокус(); Графика g = Graphics.FromImage(this.pictureBox1.Image); g.Clear(this.pictureBox1.BackColor); } } еще { если (clearRectangles) { РисованиеРекты.Очистить(); PictureBox2.Invalidate(); } х = 0; у = 0; } } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение