将简单代码从Winform转换为silverlight应用程序的问题

时间:2010-04-17 23:13:48

标签: c# winforms silverlight

我有窗口表单应用程序的代码,我一直在尝试将其转换为Silverlight应用程序,但它不起作用!有一个Textbox,我将KeyDown事件处理程序附加到它。当用户按下箭头键(左或右)而焦点在文本框上时,它会写入。要么 -。当它是窗口形式我使用e.KeyCode和Keys.Right并且它的工作很好但是当它是silverlight时我使用e.Key和key.Right并且程序不能正常工作因为箭头执行2个函数移动和写入./-。我如何在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 个答案:

答案 0 :(得分:1)

KeyDown事件与TextBox中的多个键不成比例,因为TextBox在内部使用这些键并在它们到达自定义用户代码之前将它们标记为e.Handled。

这是MSDN引用,进一步解释了这个问题:

  

另一个例子是TextBox。一些钥匙   比如ARROW键不是   通过TextBox考虑文本并且是   而是被认为是具体的   控制UI行为和TextBox   将这些事件案例标记为已处理。

如果我是你,我只是使用KeyUp事件,因为您的自定义代码似乎在该事件中正常工作。

此致
- 贾斯汀·安吉尔

答案 1 :(得分:0)

你必须设置

e.Handled = true;

所以事件不会在路线上进一步消耗。