System.Windows.Controls.Canvas到System.Windows.Controls.TextB
本文关键字:System Controls Windows TextB Canvas | 更新日期: 2023-09-27 18:04:07
我在运行时在画布上创建文本框,这就是为什么我不能在按下的文本框上使用事件KeyDown
。
private void canvas1_KeyDown(object sender, KeyEventArgs e)
{
int line = Convert.ToInt32(((TextBox)sender).Name.Substring(4, 1));
//here pop up exception
int column = Convert.ToInt32(((TextBox)sender).Name.Substring(3, 1));
}
例外是:
"无法强制转换类型为'System.Windows.Controls '的对象。Canvas'来输入'System.Windows.Controls.TextBox'。"
sender
是画布对象而不是文本框。您试图将画布转换为文本框,这是不可能的,因此会出现例外。为什么不在运行时为文本框附加一个公共事件处理程序?
myTextBox.KeyDown += new KeyEventHandler(TextBox_KeyDown);
private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
//the sender will be a TextBox here, but perform a check to avoid null exception
TextBox tb = sender as TextBox;
if(tb != null)
{
//your textbox code
}
}
您试图将画布转换为文本框,因此会出现例外。从您的代码中可以明显看出,keydown事件与画布而不是文本框相关联,并且在这种情况下发送方对象将始终是画布。
如果文本框是在运行时创建的,则需要在运行时将keydown事件附加到文本框上。
TextBox newTextBox = new TextBox();
newTextBox.KeyDown += new KeyEventHandler(newTextBox_KeyDown);
...
private void newTextBox_KeyDown(object sender, KeyEventArgs e)
{
// Code to do
}
不能将Canvas对象转换为文本框。
动态创建文本框时,可以为keydown事件设置一个函数。
mytextbox.KeyDown += myFunction;
您正在执行强制类型转换(TextBox)sender,但是sender不是TextBox类型,事件的"sender"是您的Canvas。
试着将你的sender转换为Canvas,然后使用FindControl()来查找你的文本框。
或者你可以指定一个KeyDown事件处理程序给你的文本框一旦它被创建。