【问题标题】:Clicking on a listbox means I can't click on anything else on the form单击列表框意味着我无法单击表单上的任何其他内容
【发布时间】:2010-02-21 14:42:09
【问题描述】:

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

【问题讨论】:

  • 我只是把这个放在这里,因为我在谷歌上找不到任何东西。
  • 你能发布一个代码示例吗?确保您在单击该项目时没有做其他事情 - 也许您禁用了所有内容,或者您​​在主线程上陷入了无限循环。
  • 除非在其他地方可能存在循环。项目中的代码本来就不多。
  • CW 提出这个问题有什么原因吗?
  • 我认为当您自己回答问题时将问题标记为 CW 是一种礼仪。

标签: c# winforms listbox


【解决方案1】:

这段代码:

ListBox1.Focus().Equals(false);

...不会“取消聚焦”列表框。

如果您查看documentation for Focus,您会看到它聚焦控件(如果可以),否则返回false

跟踪.Equals(false) 只是将该调用的结果 与值false 进行比较。也就是说,相当于写成这样:

!ListBox1.Focus()

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

正如您自己发现的那样,没有任何方法可以移除控件的焦点。您只能将焦点设置到其他控件。

【讨论】:

    【解决方案2】:

    如果你写它会起作用的:

    listBox1.ValueMember = "PrimaryKeyId";
    

    【讨论】:

    • 我最终得到一个错误:“列 'PrimaryKeyId' 被限制为唯一。值 '5' 已经存在。”其中 5 是我要选择的想法的值。但这只有在我连续单击两个列表框项时才会发生。
    • 但这是一个完全不同的问题。 :)
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      起作用的是将焦点设置到表单上的另一个控件。但这仍然是一个奇怪的问题。

      【讨论】:

        猜你喜欢
        • 2015-10-15
        • 2021-07-30
        • 2015-07-27
        • 2011-09-20
        • 1970-01-01
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多