问题描述
我正在尝试在运行时获取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
}
}
}