我有窗口表单应用程序的代码,我一直在尝试将其转换为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之间有什么不同的影响,还是因为别的什么?
答案 0 :(得分:1)
KeyDown事件与TextBox中的多个键不成比例,因为TextBox在内部使用这些键并在它们到达自定义用户代码之前将它们标记为e.Handled。
这是MSDN引用,进一步解释了这个问题:
另一个例子是TextBox。一些钥匙 比如ARROW键不是 通过TextBox考虑文本并且是 而是被认为是具体的 控制UI行为和TextBox 将这些事件案例标记为已处理。
如果我是你,我只是使用KeyUp事件,因为您的自定义代码似乎在该事件中正常工作。
此致
- 贾斯汀·安吉尔
答案 1 :(得分:0)
你必须设置
e.Handled = true;
所以事件不会在路线上进一步消耗。