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'。"

System.Windows.Controls.Canvas到System.Windows.Controls.TextB

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事件处理程序给你的文本框一旦它被创建。