【问题标题】:Handle Arrow keys in a UserControl to select List Item while the TextBox in UserControl has focus在 UserControl 中的 TextBox 具有焦点时处理 UserControl 中的箭头键以选择列表项
【发布时间】:2015-09-10 04:53:35
【问题描述】:

我为 List 设计了一个 UserControl,它还有一个 UserControl,即 ListItem,到目前为止,我已经通过点击 ListItemClickEvent 和 Up-till Form 上使用 That ListControl

问题是,我在 SearchTextBox 上显示该列表控件,我想做的是,当我从键盘按向下箭头键时,我将注意力集中到 ListControl,现在我想要控制上下箭头键从列表中选择一个项目,

所有 ListItems 都添加在 UserControl 中的面板控件上。

【问题讨论】:

    标签: c# vb.net winforms list user-controls


    【解决方案1】:

    您可以覆盖ProcessCmdKey 并做您想做的事。

    假设您在 UserControl 中有一个 ListBox

    VB 代码

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
        If keyData = Keys.Down Then
            'Perform validations and so on then
            Me.ListBox1.SelectedIndex = Me.ListBox1.SelectedIndex + 1
            Return True
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function
    

    C# 代码:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (keyData == Keys.Down)
        {
            //Perform validations and so on then
            this.listBox1.SelectedIndex= this.listBox1.SelectedIndex+1;
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
    

    【讨论】:

    • 上述控件是自创控件,具有面板和行数(listitemcontrol),所以我必须在 ListUserControl 上写下 ProcessCmdKey?
    • @DareDevil 如果你有一个控制 PanelTextBox 的主机并且......把逻辑放在你的 UserControl
    • @DareDevil 你可以独立于项目中的其他东西来测试它,作为一个简单的测试,你可以创建一个UserControl,然后在上面放一个TextBox和一个ListBox然后使用代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多