Нажатие на список означает, что я не могу нажать на что-либо еще в форме - PullRequest
0 голосов
/ 21 февраля 2010

Я использую список с привязкой к данным в приложении C # WinForm.

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

То, что я пытался сделать, в списке listbox1_SelectedIndexChanged установить фокус на listbox1 в false, но это не сработало.

Пример кода: это код, который назначает список источнику данных:

this.ListBox1.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.table1BindingSource, "PrimaryKeyId", true));
this.ListBox1.DataSource = this.table1BindingSource;
this.ListBox1.DisplayMember = "Name";
this.ListBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.ListBox1.FormattingEnabled = true;
this.ListBox1.ItemHeight = 24;
this.ListBox1.Location = new System.Drawing.Point(185, 28);
this.ListBox1.Name = "ListBox1";
this.ListBox1.Size = new System.Drawing.Size(660, 532);
this.ListBox1.TabIndex = 7;
this.ListBox1.ValueMember = "Name";
this.ListBox1.SelectedIndexChanged += new System.EventHandler(this.ListBox1_SelectedIndexChanged);

ListBox1 больше нигде не указан. Это исходный код, который я использовал раньше:

private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    ListBox1.Focus().Equals(false);
}

Это код, который я сейчас использую:

private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    GroupBox1.Focus().Equals(true);
}

Тогда при загрузке Windows у меня есть: table1TableAdapter.Fill(this.Application1DataSet.Table1); Я отладил загрузку Windows и метод listbox1, поэтому я не думаю, что это цикл. Кроме того, приложение не падает, поэтому я не думаю, что это цикл.

Ответы [ 4 ]

2 голосов
/ 22 февраля 2010

Этот код:

ListBox1.Focus().Equals(false);

... не «не фокусирует» окно списка.

Если вы посмотрите документацию для Focus, вы увидите, что фокусирует элемент управления, если это возможно, в противном случае он возвращает false.

Нажав на .Equals(false), просто сравнивает результат этого вызова со значением false. Другими словами, это эквивалентно написанию этого:

!ListBox1.Focus()

Что вполне очевидно, что не убирает фокус из списка, на самом деле устанавливает фокус в окне списка в большинстве случаев. Вы просто делаете сравнение возвращаемого значения, а затем выбрасываете результат сравнения.

Как вы обнаружили, нет способа удалить фокус с элемента управления. Вы можете установить фокус только на другой элемент управления.

1 голос
/ 31 августа 2010

Я также сталкивался с этим при разработке приложения, но, слава Богу, это сработало.

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  listBox1.SelectedIndex = -1;
}
1 голос
/ 22 февраля 2010

Это будет работать, если вы напишите:

listBox1.ValueMember = "PrimaryKeyId";
0 голосов
/ 21 февраля 2010

Что сработало, так это установив фокус на другой элемент управления в форме. Но это все еще странная проблема.

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