DevExpress ComboBoxEdit SelectionChangeCommitted 事件

.Net技术 码拜 8年前 (2016-03-22) 6339次浏览 2个评论

Codebye.com首发总结一下使用DevExpress ComboBoxEdit 控件的过程中的问题和用法,ComboBoxEdit功能类似微软Winforms自带的ComboBox控件,但是使用过程中并未找到SelectionChangeCommitted事件。

这个事件只会在用户改变SelectedItem时才会触发,如果SelectedItem在代码中被更改时将不会触发SelectionChangeCommitted事件。(关于ComboBox SelectionChangeCommitted事件的用法请参考此链接:http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectionchangecommitted%28v=vs.110%29.aspx)

这里提供一种ComboBoxEdit 版的SelectionChangeCommitted事件实现方式

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using DevExpress.XtraEditors;

namespace DXSelectionChangeCommitted
{
[ToolboxItem(true)]
public class MyXtraComboBoxEdit : ComboBoxEdit
{
private bool bUserChangedValue = false;
public event EventHandler SelectionChangeCommitted;

protected override void UpdateEditValueOnClose(PopupCloseMode closeMode, bool acceptValue, object newValue, object oldValue)
{
// newValue and oldValue are always the same ?www.Codebye.com 首发原创文章
if (acceptValue && newValue != EditValue)
{
bUserChangedValue = true;
}

base.UpdateEditValueOnClose(closeMode, acceptValue, newValue, oldValue);
}

protected override void UpdatePopupEditValueIndex(int prevIndex)
{
base.UpdatePopupEditValueIndex(prevIndex);

if (SelectionChangeCommitted == null || !bUserChangedValue)
return;

bUserChangedValue = false;
SelectionChangeCommitted(this, new EventArgs());
}

protected override void ScrollValue(int delta, bool cycle)
{
base.ScrollValue(delta, cycle);

if (SelectionChangeCommitted == null)
return;

bUserChangedValue = false;
SelectionChangeCommitted(this, new EventArgs());
}
}
}

如此这般即可实现ComboBoxEdit 的SelectionChangeCommitted事件。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明DevExpress ComboBoxEdit SelectionChangeCommitted 事件
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!

(2)个小伙伴在吐槽
  1. 已经知道了。谢谢
    jurieo2017-02-18 23:26 回复
  2. 兄弟,你这个怎么用呢?
    jurieo2017-02-18 22:02 回复