单击列表框意味着我无法单击表单上的任何其他内容

时间:2010-02-21 14:42:09

标签: c# winforms listbox

我在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 load和listbox1方法,所以我不认为它是一个循环。此外,该应用程序不会崩溃,所以我不认为这是一个循环。

4 个答案:

答案 0 :(得分:2)

此代码:

ListBox1.Focus().Equals(false);

...没有“取消对焦”列表框。

如果您查看documentation for Focus,您会看到关注控件,如果可以,否则返回false

点击.Equals(false)只是将该调用的结果与值false进行比较。换句话说,它相当于写这个:

!ListBox1.Focus()

显然从列表框中移除焦点,在大多数情况下,它实际上设置焦点到列表框。您只是在返回值上进行比较,然后抛弃比较结果。

正如您自己发现的那样,没有办法从控件中移除焦点。您只能将焦点设置为其他控件。

答案 1 :(得分:1)

如果你写的话会有效:

listBox1.ValueMember = "PrimaryKeyId";

答案 2 :(得分:1)

我在开发应用程序时也遇到过这种情况,但感谢上帝,这很有用。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  listBox1.SelectedIndex = -1;
}

答案 3 :(得分:0)

工作是将焦点设置为表单上的另一个控件。但它仍然是一个奇怪的问题。