Нужна помощь, чтобы мой Listbox.SeletectedIndex работал правильно - PullRequest
0 голосов
/ 03 июля 2019

Мне нужна помощь, чтобы заставить мой listbox.selecteditem работать. Это мой псевдокод.

public Form1()
{
    if (x == 1)
    {
        if (this.ListBox1.SelectedIndex != 5 ||
            this.ListBox1.SelectedIndex != -1)
        {
            ListBox1.MouseDoubleClick += new MouseControlHandler(ListBox1_MouseDoubleClick); 
        } 
    }
    else 
    {
        //Do something else.
    }              
}

private void ListBox1_MouseDoubleClick(object sender, System.EventArgs e)
{
    int index = this.ListBox1.IndexFromPoint(e.Location);
    if (index != System.Windows.Forms.ListBox.NoMatches)
    {
        MessageBox.Show("Hello World!");
    }
}

Теперь я получил условие для проверки, когда х не равен 1; двойной щелчок не работает, что я и хотел. Когда х равен 1; У меня есть 10 пунктов, добавленных в список. Я не хочу, чтобы пользователь видел "Hello World!" сообщение, когда пользователь нажимает на элемент с индексом = 5. Я не могу заставить это работать. Даже когда пользователь нажимает на элемент с индексом = 5; сообщение все еще всплывает. Я попытался отладить, но основной всплывающий экран не открывается во время отладки. Все, что я мог видеть, это selectedindex = -1. Настоящий код огромен.

Это правильный подход для этого? Спасибо.

1 Ответ

0 голосов
/ 03 июля 2019

Проблема в том, что вы используете || (ИЛИ), когда вам следует использовать && (И).Давайте разберемся с этим: когда index = 5, вы не хотите, чтобы что-то случилось.Но когда index = 5, тогда index != -1 равно True, и поэтому код двойного щелчка по-прежнему срабатывает, потому что False OR True = True.Кроме того, когда x != 1, вам необходимо отписаться от события (или установить его на нуль).Если нет, то как только он установлен, он будет срабатывать, если происходит событие двойного щелчка.

Это код, который вы хотите:

public Form1()
{
    if (x == 1 && this.ListBox1.SelectedIndex != 5 && this.ListBox1.SelectedIndex != -1)
    {
       ListBox1.MouseDoubleClick += new MouseControlHandler(ListBox1_MouseDoubleClick);
    else 
    {
        ListBox1.MouseDoubleClick = null;
    }              
}

private void ListBox1_MouseDoubleClick(object sender, System.EventArgs e)
{
    int index = this.ListBox1.IndexFromPoint(e.Location);
    if (index != System.Windows.Forms.ListBox.NoMatches)
    {
        MessageBox.Show("Hello World!");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...