【问题标题】:How to get ListBox to load after selecting ComboBox value?选择 ComboBox 值后如何让 ListBox 加载?
【发布时间】:2013-02-22 16:27:44
【问题描述】:

使用 VS 2012、WinForms、C#...

我有一个列表框,我想根据在组合框中选择的值来填充。我已经测试了我的 SQL 查询并且它可以工作,但是我遇到了一个奇怪的问题,当我运行我的例程时,我的 ComboBox 和我的 ListBox 都是空的。当我在cb_Session_SelectedValueChanged 例程中注释掉代码时,我的 CB 和 LB 加载得很好,但是当它没有被注释掉时,我的 LB 和 CB 最终为空白。

这就是我所拥有的:

private void cb_Session_SelectedValueChanged(object sender, EventArgs e)
{
    listbox_Sessions.Visible = true;
    LoadSessionListbox();
}

private void LoadSessionListbox()
{
    int tempID = Convert.ToInt32(cb_Session.SelectedValue);
    // Code here to load listbox, which works without above routine.
}

我错过了什么吗?为什么添加第一个例程后我的 CB 和 LB 是空白的?

[编辑]:

我将 SelectedValueChanged 中的例程放在 MouseClick 事件中,它可以工作,但不是在我想要的时候...您必须单击几次才能使用正确的 ID 重新加载它。我觉得我越来越近了,但仍然不是正确的事件。

【问题讨论】:

  • cb_Session_SelectedValueChanged 可能在您的表单初始化时被调用,cb_Session.SelectedValue 可能是 null。由于cb_Session.SelectvedValue 为空,该值正在加载到您的ListBox 中。您能否发布更多代码,以便我们确切了解发生了什么?
  • @IanO'Brien 我可以,我只是不确定要发布什么代码。我正沉浸在这个表单上的代码中......
  • 您是否遇到了列表框引发的影响组合框的事件?您发布的 coude 看起来不错,但这还不够。 CB如何以及何时填写?
  • CB 填写在 public ThisForm() {} 例程中。 (一开始)我所有的 CB 和 LB 例程都在里面。
  • 如果您不确定要发布什么代码,请发布围绕comboboxlistbox 和调用它们的eventhandlers 的代码。

标签: c# sql-server winforms combobox listbox


【解决方案1】:

试试这个:

private void cb_Session_SelectedValueChanged(object sender, EventArgs e)
{
  if(cb_Session.SelectedValue>-1)
   {
    listbox_Sessions.Visible = true;
    LoadSessionListbox();
   }

}

【讨论】:

  • 其实cb_Session.SelectedValue!=null 是不需要的,我来编辑
【解决方案2】:

想通了!!

我最终在我的 SelectedValueChanged 例程中添加了一个简单的 if 语句,它解决了所有问题!

private void cb_Sessions_SelectedValueChanged(object sender, EventArgs e)
{
    listBox_Sessions.Visible = true;

    if (cb_Sessions.SelectedValue != null)
        LoadSessionListbox();
}

现在完美运行。

【讨论】:

  • 哦。我认为 null 不需要检查,因为事件正在被触发。所以我假设 SelectedValue 不会为空。这就是我编辑的原因。呸呸呸耸耸肩
  • @DJBurb 我很高兴我让它工作了。 :) 你们都帮了我很多,让我达到了我需要的程度。
  • @spajce 我有.. 你为什么这么说?
【解决方案3】:

试试SelectedIndexChanged Event并关注

private void cb_Session_SelectedIndexChanged(object sender, EventArgs e)
{
    if (cb_Session.SelectedValue == null) return;
    if (cb_Session.SelectedIndex == -1) return;
    listbox_Sessions.Visible = true;
    LoadSessionListbox((int)cb_Session.SelectedValue);
}

private void LoadSessionListbox(int selectedValue)
{
   //TODO: Do stuff
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2015-10-20
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多