проблема с преобразованием простого кода из Winform в приложение silverlight - PullRequest
0 голосов
/ 18 апреля 2010

У меня есть этот код для приложения формы окна, и я пытался преобразовать его в приложение Silverlight, но он не работает !. Есть текстовое поле, и я прикрепил к нему обработчик событий KeyDown. когда пользователь нажимает клавишу со стрелкой (влево или вправо), когда фокус на текстовое поле, он будет писать. или же -. Когда это оконная форма, я использовал e.KeyCode и Keys.Right, и она прекрасно работает, но когда это серебристый свет, я использовал e.Key и key.Right, и программа не работает, потому что стрелки выполняют две функции: перемещение и запись ./-. Как я могу решить это в Silverlight? (Мой английский не очень хороший)

Код (форма окна):

private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (sender is TextBox)
            {
                TextBox textBox = (TextBox)sender; 
                if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
                {
                    e.Handled = true; 
                    char insert; 
                    if (e.KeyCode == Keys.Left) 
                    { insert = '.'; }

                    else
                    { insert = '-'; } 
                    int i = textBox.SelectionStart; 
                    textBox.Text = textBox.Text.Insert(i, insert.ToString()); 
                    textBox.Select(i + 1, 0);
                }
            }
        }

(и Silverlight):

private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (sender is TextBox)
            {
                TextBox textBox = (TextBox)sender; 
                if (e.Key == Key.Left || e.Key == Key.Right)
                {
                    e.Handled = true; 
                    char insert;
                    if (e.Key == Key.Left) 
                    { insert = '.'; }

                    else
                    { insert = '-'; } 
                    int i = textBox.SelectionStart; 
                    textBox.Text = textBox.Text.Insert(i, insert.ToString()); 
                    textBox.Select(i + 1, 0);
                }
            }
        }

Я не понимаю, есть ли огромный разный эффект между использованием Keycode / Keys и Key / Key или из-за чего-то еще?

Ответы [ 2 ]

1 голос
/ 18 апреля 2010

Событие KeyDown не будет пропорционально для нескольких ключей в TextBox, так как TextBox использует эти ключи внутри и помечает их как e.Handled, прежде чем они попадут в пользовательский код пользователя.

Вот цитата MSDN , которая объясняет проблему дальше:

Другим примером является TextBox. Некоторые ключи такие как клавиши со стрелками не считается текст TextBox и вместо этого считается конкретным для управлять поведением пользовательского интерфейса и TextBox помечает эти случаи как обработанные.

На вашем месте я бы просто использовал событие KeyUp, поскольку ваш пользовательский код работает нормально в этом событии.

С уважением,
- Джастин Анхель

0 голосов
/ 18 апреля 2010

Вы должны установить

e.Handled = true;

, поэтому событие не будет использовано дальше по маршруту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...