Проблема в том, что вы используете ||
(ИЛИ), когда вам следует использовать &&
(И).Давайте разберемся с этим: когда 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!");
}
}