【问题标题】:Prevent RepositoryItemSearchLookUpEdit when Popup is Open When CloseUpKey.Key is pressed当按下 CloseUpKey.Key 时打开弹出窗口时阻止 RepositoryItemSearchLookUpEdit
【发布时间】:2017-06-24 17:17:32
【问题描述】:

我使用RepositoryItemSearchLookUpEdit。其CloseUpKey 属性设置为space

result.CloseUpKey = new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.Space);

我只想将此快捷方式用于打开弹出窗口,用于关闭弹出窗口。

我怎样才能做到这一点?

更新------------------------

首先我创建一个RepositoryItemSearchLookUpEdit 对象

var result = new RepositoryItemSearchLookUpEdit();
result.CloseUpKey = new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.Space);
result.KeyDown += repositoryItemLookUpEdit_KeyDown;
result.CloseUp += repositoryItemLookUpEdit_CloseUp;
result.QueryCloseUp += repositoryItemLookUpEdit_QueryCloseUp; 

private void repositoryItemLookUpEdit_QueryCloseUp(object sender, System.ComponentModel.CancelEventArgs e)
    {
        var edit = sender as SearchLookUpEdit;
        KeyEventArgs k = new KeyEventArgs(edit.Properties.CloseUpKey.Key);
        AttachKeyPressEvent(k);
        if (k.KeyCode == edit.Properties.CloseUpKey.Key)
            e.Cancel = true;
    }

并将其传递给网格列:

grdListView.Columns["yyy"].ColumnEdit = result

如何在不创建后代 SearchLookUpEdit 的情况下使用这些 events 实现这一目标

【问题讨论】:

    标签: winforms devexpress xtragrid


    【解决方案1】:

    更新:

    问题是 CloseUp 事件(您可以在其中获得有关特写键的必要信息)发生在 QueryCloseUp 事件之后(您可以在其中出现关闭事件)。此外,当 QueryCloseUp 发生时,KeyPress、KeyDown 和 KeyUp 事件似乎也不会发生,因此它们无法被覆盖。所以我尝试了这个,我创建了一个自定义 KeyEventHandler 并在 QueryCloseUp 事件期间触发了他,以便获取按下什么键的必要信息,如果关闭键事件是那个事件,则取消该事件。这是我的代码试试看是否适合你

           public partial class Form1 : Form
           {
             public Form1()
        {
            InitializeComponent();
            //Here you can add your grid control as you have created
            DataTable dt = new DataTable();
            dt.Columns.Add("ID"); //use your own names and types
            gridControl1.DataSource = dt;
    
            var result = new RepositoryItemSearchLookUpEdit();
            result.CloseUpKey = new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.Space);
            result.QueryCloseUp += new CancelEventHandler(repositoryItemLookUpEdit_QueryCloseUp);
            ((gridControl1.MainView as GridView).Columns["ID"] as GridColumn).ColumnEdit = result;
        }
    
        private static readonly object myQueryCloseUp = new object();
    
        public event KeyEventHandler MyQueryCloseUp
        {
            add { Events.AddHandler(myQueryCloseUp, value); }
            remove { Events.RemoveHandler(myQueryCloseUp, value); }
        }
        protected virtual void AttachKeyPressEvent(KeyEventArgs e)
        {
            KeyEventHandler handler = (KeyEventHandler)Events[myQueryCloseUp];
            if (handler != null)
                handler(this, e);
        }
        //Here you add your own Handler implementation
        public void repositoryItemLookUpEdit_QueryCloseUp(object sender, CancelEventArgs e)
        {
            KeyEventArgs k = new KeyEventArgs((sender as SearchLookUpEdit).Properties.CloseUpKey.Key);
            AttachKeyPressEvent(k);
            if (k.KeyCode == (sender as SearchLookUpEdit).Properties.CloseUpKey.Key)
                e.Cancel = true;
        }
    
    }
    

    【讨论】:

    • 感谢您的回答,我在 QueryPopUp 事件中遇到问题,知道“何时从 CloseUp 键发送”。
    • 当事件通过按下你设置为特写键的键(在你的例子中是空格)触发时,事件的发送者是什么对象?
    • SearchLookUpEdit,问题是我无权访问当前按键值以将其与 CloseUpKey 属性进行比较。
    • 检查我更新的答案。它适用于我的测试项目
    • 感谢您的回答,我会尽快检查。
    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2012-09-20
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多