【问题标题】:Listview selectionchanged fires twice, How to control?Listview selectionchanged 触发两次,如何控制?
【发布时间】:2014-07-31 15:51:11
【问题描述】:

显示表格后,此负载重新开始。我知道这是设计使然。但我不喜欢再秀了。

    private void HandleLSVVacunacion_SelectedIndexChanged(object sender, EventArgs e)
    {
        ListView SourceControl = (ListView)sender;

        if (SourceControl.SelectedItems.Count > 0)
        {
            int IdVacunacion = Convert.ToInt32(LSVVacunacion.SelectedItems[0].SubItems[0].Text.Trim());
            Formularios.FrmVacunacion f = new Formularios.FrmVacunacion();
            f.ID = IdVacunacion;
            f.HC = hc;
            f.ShowDialog();
            CargarEsquemaVacunacion(); // reload The ListView with changes; and show again the form!

        }

    }

【问题讨论】:

  • 调用 HandleLSVVacunacion_SelectedIndexChanged(sender, e);

标签: c# listview selectedindexchanged


【解决方案1】:

如果CargarEsquemaVacunacion 中的代码导致事件处理程序重新进入,那么您可以删除事件处理程序,重新加载列表并重新应用事件处理程序

    if (SourceControl.SelectedItems.Count > 0)
    {
        .....
        f.ShowDialog();
        try
        {
            LSVVacunacion.SelectedIndexChanged -= HandleLSVVacunacion_SelectedIndexChanged;
            CargarEsquemaVacunacion(); 
        }
        finally
        {
            LSVVacunacion.SelectedIndexChanged += HandleLSVVacunacion_SelectedIndexChanged;
        }

    }

请注意,此代码位于 try/finally 块内,以确保在发生异常时事件处理程序也被重新应用于事件 SelectedIndexChanged

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 2014-03-26
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多