投射文本框KeyEventArgs

问题描述

我正在尝试在运行时获取textBox控件的KeyUp事件,但我正在努力正确地进行投射。下面的代码经过编译,当我添加Watch / Insert rtbPrivateNote_KeyUp-> EventArgs e:

时,我可以看到事件信息。
public class Form1
{
    private System.Windows.Controls.TextBox rtbPrivateNote = null;
    
    public InitFormControls()
    {
        LoadSpellChecker(ref pnlPrivateNotes,ref rtbPrivateNote,"txtPrivateNotePanel");
        rtbPrivateNote.TextChanged += new System.Windows.Controls.TextChangedEventHandler(rtbPrivateNote_TextChanged);
        rtbPrivateNote.KeyUp += new System.Windows.Input.KeyEventHandler(rtbPrivateNote_KeyUp);
    }
    
    private void LoadSpellChecker(ref Panel panelRichText,ref System.Windows.Controls.TextBox txtWithSpell,string ControlName)
    {
        txtWithSpell = new System.Windows.Controls.TextBox
        {
            Name = ControlName
        };
        txtWithSpell.SpellCheck.IsEnabled = true;
        txtWithSpell.Width = panelRichText.Width;
        txtWithSpell.Height = panelRichText.Height;
        txtWithSpell.AcceptsReturn = true;
        txtWithSpell.AcceptsTab = true;
        txtWithSpell.AllowDrop = true;
        txtWithSpell.IsReadOnly = false;
        txtWithSpell.textwrapping = System.Windows.textwrapping.Wrap;
    
        ElementHost elementHost = new ElementHost
        {
            Dock = DockStyle.Fill,Child = txtWithSpell
        };
    
        panelRichText.Controls.Add(elementHost);
    }
    
    // private void rtbPrivateNote_KeyUp(object sender,KeyEventArgs e)  // WONT COMPILE
    private void rtbPrivateNote_KeyUp(object sender,EventArgs e)
    {
        //if (e.Key == Key.Enter  
        //    || e.Key == Key.Return)
        //{
        //    Do Something here
        //}
    }
}

解决方法

您不能像这样强制转换它,因为KeyEventArgs派生自EventArgs,并且由于e不是KeyEventArgs,它表示不能转换它。

如果e的类型为KeyEventArgs,则可以将其强制转换为EventArgs。

private void rtbPrivateNote_KeyUp(object sender,EventArgs e)
{
    KeyEventArgs ke = e as KeyEventArgs;
    if (ke != null)
    {
       if (ke.Key == Key.Enter  || ke.Key == Key.Return)
       {
        //Do Something here
       }
    }
}