【问题标题】:How to make the arrows keys act as another keys?如何使箭头键充当另一个键?
【发布时间】:2010-04-11 09:00:04
【问题描述】:

在 Silverlight 项目中,如何使左箭头像 .(点)一样,当用户在文本框中按下左箭头时,它会键入 .以及如何使右箭头像 - (破折号)

我想使用 CTRL 键在 2 种模式之间切换: .和破折号,常规箭头行为,意味着当用户按下控制时,拖曳箭头将充当 .和破折号。当用户再次按下控件时,2 个箭头将像通常的箭头一样。

【问题讨论】:

  • 这是在 Windows 窗体还是 ASP.NET 中?以及什么样的控制? (或者别的什么?)
  • 也许不是在应用程序内部,而是在系统范围内,使用 C# 来实现。 @le.shep20,您能否更新您的问题以澄清您的目标?
  • 哦,对不起,我应该更清楚..实际上我正在从事 Silverlight 项目,如何在 Silverlight 中完成这项任务?

标签: c# silverlight arrow-keys


【解决方案1】:

如果是 win 表单或 WPF,您只需捕获按键事件并更改其行为,然后将其设置为“已处理”(在 (PreviewKeyDown) 之前和之后有一堆事件,您可以使用它们来完全控制什么)每次按键都会发生。

您也可以使用 API 检查是否按下了 CTRL 键。 在 WPF 中使用 KeyboardDevice 属性,检查:

if ((e.KeyboardDevice.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)

补充: 同时 - 看看这个SO question

还有这个:SO Question2

【讨论】:

  • 谢谢 Dani,但我忘了说我正在开发 silverlight 应用程序!我如何使用 Silverlight 来做到这一点 - 我是新手!
  • 我不知道silverligt,但我知道它与wpf 非常相似。我会检查并尝试更新答案。
【解决方案2】:
private void textBox1_KeyUp(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) 
                    { 
                        textBox1.SelectionStart = textBox1.Text.Length + 1; 
                        insert = '.';
                    }
                    else
                    { 
                        insert = '-';
                    } 
                    int i = textBox.SelectionStart;
                    textBox1.Text = textBox1.Text.Insert(i, insert.ToString());
                    textBox1.Select(i + 1, 0);
                }
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多