.net - 如何处理 ComboBox 选定的索引更改?

标签 .net winforms combobox

我有一个包含制造商列表的 ComboBox。当用户选择制造商时,下方的网格将填充所选制造商的数据。该数据可以修改。完成所有更改后,用户必须按“保存”按钮。

但是用户可能会忘记按 Save 并从 ComboBox 中选择另一个制造商,并且网格将填充另一个数据,因此之前的更改将丢失。

所以我需要在选择其他制造商之前询问用户是否要保存更改。

我怎样才能做到这一点?或者,也许您提供了另一种解决我的任务的方法(从另一个角度看)?

最佳答案

以下是我们如何将 ComboBox 子类化以引入新的 SelectedIndexChangingEvent 并有可能取消更改:

    public class ComboBoxEx : ComboBox
{
    public event CancelEventHandler SelectedIndexChanging;

    [Browsable(false)]
    public int LastAcceptedSelectedIndex { get; private set; }

    public ComboBoxEx()
    {
        LastAcceptedSelectedIndex = -1;
    }

    protected void OnSelectedIndexChanging(CancelEventArgs e)
    {
        var selectedIndexChanging = SelectedIndexChanging;
        if (selectedIndexChanging != null)
            selectedIndexChanging(this, e);
    }


    protected override void OnSelectedIndexChanged(EventArgs e)
    {
        if (LastAcceptedSelectedIndex != SelectedIndex)
        {
            var cancelEventArgs = new CancelEventArgs();
            OnSelectedIndexChanging(cancelEventArgs);

            if (!cancelEventArgs.Cancel)
            {
                LastAcceptedSelectedIndex = SelectedIndex;
                base.OnSelectedIndexChanged(e);
            }
            else
                SelectedIndex = LastAcceptedSelectedIndex;
        }
    }

}

关于.net - 如何处理 ComboBox 选定的索引更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/782313/

相关文章:

c# - WPF Storyboard延迟播放wma文件

c# - 使用 select 和 bool 数组过滤字符串数组

c# - 如何在可空类型之前将空值输入到日期时间?

c# - Wpf DataGridTemplateColumn 和 ComboBox 中的意外更改作为 CellEditingTemplate

c# - 哪种 ORM 最适合这里?

asp.net - WebForms 不显眼的验证模式

windows - 错误1001。初始化安装时发生异常

vb.net - 更改 Windows 中的窗口区域

haskell - ComboBox 不显示任何字符串

组合框跳转到键入的字符