2

実行時にキャンバスにテキストボックスを作成しているため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' にキャストできません。」

4

4 に答える 4

1

キャンバスをテキストボックスとしてキャストしようとしているため、例外が発生します。コードから明らかなように、keydown イベントはテキスト ボックスではなくキャンバスに関連付けられており、この場合、sender オブジェクトは常にキャンバスになります。

テキスト ボックスが実行時に作成される場合は、実行時にテキスト ボックスに keydown イベントをアタッチする必要があります。

TextBox newTextBox = new TextBox();

newTextBox.KeyDown += new KeyEventHandler(newTextBox_KeyDown);

...

private void newTextBox_KeyDown(object sender, KeyEventArgs e)
{
    // Code to do
}

お役に立てれば。

于 2013-03-16T13:51:04.760 に答える
0

キャスト(TextBox)送信者を実行していますが、送信者のタイプはTextBoxではなく、イベントの「送信者」はCanvasです。

送信者をCanvasにキャストしてから、FindControl()を使用してテキストボックスを検索してみてください。

または、作成後にKeyDownイベントハンドラーをTextBoxに割り当てることもできます。

于 2013-03-16T13:45:12.787 に答える