Запретить изменение списка выбора - PullRequest
0 голосов
/ 30 января 2019

Я очень плохо знаком с C # и программированием в целом.У меня есть вопрос относительно моего маленького проекта.У меня есть несколько списков, которые связаны с моей базой данных SQL.Под списками у меня есть текстовые поля для ввода новых значений в базу данных.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я вписываю что-то в текстовое поле (я сделал это, нажав Enter, запускается событие Keydown, чтобы добавитьлиния) выбор из моих списков изменяется.Это раздражает, так как то, что я выбрал, важно, так как я присоединился к нескольким базам данных, и выбор - это то, что определяет, куда вводятся данные.

Поэтому мой вопрос, есть ли способ в WPF или C # предотвратить выбранный элемент?быть не выбранным?Я искал какое-то время, но не могу найти ничего, кроме объяснений, которые я просто не понимаю, имея немного знаний.

Редактировать

Спасибо за ответы.Я просмотрел ссылки, которые опубликовали люди, но не мог понять, как они относятся к моей конкретной проблеме.Я пытался сохранить SelectedIndex в переменной, а затем установить SelectedIndex обратно в эту переменную после, но я должен был где-то сделать ошибку.

int y;
        private void TxbSchüler_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                y = listClasses.SelectedIndex; // Here

                try
                {
                    string query = "insert into Schüler values (@Name, @KlassenId)";
                    SqlCommand sqlCommand = new SqlCommand(query, sqlConnection);
                    sqlConnection.Open();
                    sqlCommand.Parameters.AddWithValue("@Name", txbSchüler.Text.ToString());
                    sqlCommand.Parameters.AddWithValue("@KlassenId", listClasses.SelectedValue);
                    sqlCommand.ExecuteScalar();

                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.ToString());
                }
                finally
                {

                    sqlConnection.Close();
                    ShowStudent();
                    ShowClass();

                }

            }
            listClasses.SelectedIndex = y; //here

        }

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Итак, мне трудно сказать, не видя остальной части вашего кода, но вы объявляете y вне вашего TxbSchüler_KeyDown метода.Поскольку это выходит за рамки вашего метода, это означает, что другие методы в вашем классе будут иметь доступ к этой переменной и смогут обновить ее значение до завершения выполнения вашего метода (что может быть вашей проблемой).

Вполне возможно, учитывая ваш код, что y обновляется вне метода TxbSchüler_KeyDown.Я бы посмотрел в ваших ShowStudent и ShowClass методах, чтобы увидеть, используют ли они также переменную с именем y ИЛИ , если эти методы обновляют listClasses.SelectedIndex, так как они, вероятно, имеют доступ к обновлениюэто значение и, следовательно, возможность обновления y, поскольку y привязано к listClasses.SelectedIndex.

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

Короче говоря, если вы перемещаете объявление переменной y внутри вашего метода, это может решить вашу проблему, если вы обновляете y в другом месте своего кода (либо через обновление в * 1022).* или напрямую меняется y).Если нет, то может быть более сложной проблемой управления.Но я сомневаюсь в этом.

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

Ссылка: Geeks For Geeks: C # Variable Scope

Надеюсь, ваше исправление так просто.С наилучшими пожеланиями.

PS - также назовите это что-то лучше, чем y, так как оно будет торчать, как больной большой палец, в других местах вашего кода.y является расплывчатым и неописательным.Назовите это что-то вроде int CurrentIndex

0 голосов
/ 30 января 2019

Перед добавлением элемента сохраните выбранный индекс в переменной и установите выбранный индекс обратно в эту переменную после добавления элемента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...