Рейтинг:
10
Christian Graus
Вы не показываете метод updatestudent, но очевидно, что индекс, который вы передаете, является недопустимым. Почему ты думаешь, что это не так?
Member 14351839
Я добавил метод UpdateStuent и потому, что я ввожу целое число, и у меня оно установлено как целое число?
Christian Graus
Индекс-это целое число, которое вы ввели? как это может работать? Это индекс в массиве, он должен быть индексом редактируемого элемента, переданного из родительской формы
Member 14351839
GetStudent(int идентификатор) UpdateStudent = студент студент = GetStudent(originalIndex);
Member 14351839
Я не знаю, как это объяснить. Я приложил свой исходный код, чтобы вы могли увидеть точную проблему. Буду продолжать работать над этим.
Christian Graus
Именно это я и сказал
Студент студент = GetStudent(студенты.SelectedIndex); //выберите индекс из списка
студенты.SelectedIndex равен -1. Я так и думал. Это индекс списка. Сохраните это в переменной, когда вы начнете редактировать, потому что она будет снята, когда появится новое диалоговое окно.
Christian Graus
И узнайте, как использовать ваш отладчик. Я запустил его, он взорвался, я посмотрел на стек вызовов, проверил значение и увидел проблему
Member 14351839
Так почему же именно он находится вне зоны досягаемости? Итак, я должен хранить индекс в переменной в форме обновления?
Christian Graus
-1 всегда является недопустимым значением. -1 означает, что ничего не выбрано. Ваш список не имеет выбора к тому времени, когда вы вызываете это. Это просто то, как ведет себя пользовательский интерфейс. Вам нужно сохранить индекс в локальной переменной, когда выбор изменится, и использовать это значение для вашего индекса
Member 14351839
Есть ли у вас шанс попытаться исправить мое решение? Я не знаю, как установить индекс в локальную переменную, когда выбор меняется. Я застрял в этой части на несколько дней.
Christian Graus
частный int _selectedIndex;
частная students_SelectedIndexChanged_1 недействительным(объект отправителя, EventArgs в электронной)
{
_selectedIndex = студенты.Свойства selectedIndex;
Теперь замените студентов.SelectedIndex с вашей новой локальной переменной
Christian Graus
Это уже другая форма. Не публикуйте целый класс, если вы думаете, что что-то сделали, покажите мне фрагмент. Я запускаю ваш код, я вижу, где он взрывается и почему
Member 14351839
Я изменился
частная students_SelectedIndexChanged_1 недействительным(объект отправителя, EventArgs в электронной)
{
_selectedIndex = студенты.Свойства selectedIndex;
Student student = GetStudent(_selectedIndex); //выберите индекс из списка
ScoreTotalTextBox.Текст = студент.GetScoreTotal().ToString(); //показать общий балл в поле
ScoreCountTextBox.Текст = студент.GetScoreCount().ToString(); //show Score Count to box
ScoreAverageTextBox.Текст = студент.Getscore saverage().ToString(); //показать средний балл в поле
}
а также изменил метод UpdateStudent, но я все еще получаю ту же ошибку.
Christian Graus
Научитесь использовать отладчик. Вы получаете ту же ошибку, потому что вы все еще ищете индекс из элемента управления, а не свою переменную. Отладчик покажет вам это, если вы посмотрите. Посмотрите на стек вызовов и увидите метод, который вызвал метод, который взорвался.
Member 14351839
Это приводит меня к методу, прямо описанному выше. Если моя логика верна, то первая строка "Student student = GetStudent(студенты.SelectedIndex);" выбирает индекс из списка, который я создал в классе student и внутри класса student, который я объявил
public int Getscore (индекс int)
{
return (int)studentList[индекс];
}
Member 14351839
Наверное, я запутался в том, где установить индекс и как его назвать.
Christian Graus
студенты-это ваш список. Значение SelectedIndex равно -1. Вот почему мы сохранили его в переменной
Member 14351839
Я считаю, что я сохранил SelectionIndex, но все еще получаю ту же ошибку.
Christian Graus
Замените студентов.SelectedIndex с _selectedIndex, переменной, которую мы создали. Если этот вызов находится в другой форме, то вы можете создать новый метод в базовой форме, который предполагает, что _selectedIndex-это нужный вам индекс.
Member 14351839
Я добавил:
частная students_SelectedIndexChanged_1 недействительным(объект отправителя, EventArgs в электронной)
{
_selectedIndex = студенты.Свойства selectedIndex;
Student student = GetStudent(_selectedIndex); //выберите индекс из списка
ScoreTotalTextBox.Текст = студент.GetScoreTotal().ToString(); //показать общий балл в поле
ScoreCountTextBox.Текст = студент.GetScoreCount().ToString(); //show Score Count to box
ScoreAverageTextBox.Текст = студент.Getscore saverage().ToString(); //показать средний балл в поле
}
и создал переменную private int _selectedIndex; внутри того же класса, но с той же ошибкой.
Christian Graus
Вы сохранили его, но не использовали на другом конце!!!
Member 14351839
Что вы хотите этим сказать? Я попытался вызвать его в своем методе GetProduct, но это не сработало.
Christian Graus
Теперь я понимаю. Попробуйте добавить код, который проверяет, равен ли выбранный индекс -1, и не продолжает работу, если это так.
Member 14351839
Как бы я это сделал? Я пошел сюда https://stackoverflow.com/questions/21327931/get-the-index-of-item-selected-in-listview и добавил оператор if, но безрезультатно.
Christian Graus
если (_selectedIndex &ГТ; -1){
Student student = GetStudent(_selectedIndex); //выберите индекс из списка
....
}
Member 14351839
Что казалось, чтобы исправить это. Это сейчас
частная students_SelectedIndexChanged_1 недействительным(объект отправителя, EventArgs в электронной)
{
_selectedIndex = студенты.Свойства selectedIndex;
если (_selectedIndex &ГТ; -1)
{
Student student = GetStudent(_selectedIndex); //выберите индекс из списка
Student students = GetStudent(_selectedIndex); //выберите индекс из списка
ScoreTotalTextBox.Текст = студент.GetScoreTotal().ToString(); //показать общий балл в поле
ScoreCountTextBox.Текст = студент.GetScoreCount().ToString(); //show Score Count to box
ScoreAverageTextBox.Текст = студент.Getscore saverage().ToString(); //показать средний балл в поле
}
}
Christian Graus
Да, так что в конце концов, ваше выбранное событие изменения индекса не имело дела с отменой выбора поля, оно предполагало, что выбор всегда был. Ваш код также взрывается, если вы добавляете студента без баллов, Ваша обработка крайних случаев нуждается в работе
Member 14351839
Да, я полагал, что он автоматически сохранит индекс, основанный на моем выборе. Мне все еще нужно добавить много проверок ошибок, но я рад, что мы это сделали. Я застрял на несколько дней! лол еще раз спасибо
Christian Graus
Рад помочь. Медленный рабочий день означал, что у меня было время загрузить код и покопаться в нем