我在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方法,所以我不认为它是一个循环。此外,该应用程序不会崩溃,所以我不认为这是一个循环。
答案 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)
工作是将焦点设置为表单上的另一个控件。但它仍然是一个奇怪的问题。