C# 正确使用KeyDown事件
我有以下功能:C# 正确使用KeyDown事件,c#,windows-phone-8,textbox,C#,Windows Phone 8,Textbox,我有以下功能: private void TextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) { TextBox TextBox = (TextBox)sender; if (TextBox.Text == "Name" || TextBox.Text == "E-mail address" || TextBox.Text == "Confirm e-mail" ||
private void TextBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
TextBox TextBox = (TextBox)sender;
if (TextBox.Text == "Name" ||
TextBox.Text == "E-mail address" ||
TextBox.Text == "Confirm e-mail" ||
TextBox.Text == "Mobile number" ||
TextBox.Text == "Password")
{
TextBox.Foreground = new SolidColorBrush(Colors.Black);
TextBox.Text = e.Key.ToString().ToLower();
TextBox.Select(1, 0);
}
}
我的文本框最初将一个标签设置为其.Text属性。当用户点击文本框时,我希望光标移到开头,然后当他们开始键入时,标签消失
这工作正常,但问题是当我点击零时,文本框中填充了“D0”。它也不能正确处理外壳,这就是我添加ToLower调用的原因。我只想让文本框自己清除,然后用正确的大小写显示用户点击的内容。它工作不正常的其他例子是,如果我点击空格键,它会显示“空格”
有什么想法吗?如果我正确理解了您的意思-“我只想让文本框自行清除,然后用正确的大小写准确显示用户点击的内容。”-您不需要处理
按键事件。尝试使用所安装的GotFocus
myTextBox.GotFocus += (s, e) =>
{
myTextBox.Text = "";
};
当用户开始键入时,上面的简单代码将清除该字段。您不需要处理向下键
-当用户按键时,文本框会自动填充
顺便说一句,使用TextBox作为TextBox的名称是一种非常糟糕的做法
编辑-评论后
那么这就足够了:
private bool toClear = false;
public MainPage()
{
InitializeComponent();
myTextBox.GotFocus += (s, e) =>
{
myTextBox.SelectionStart = 0;
toClear = true;
};
myTextBox.KeyUp+=myTextBox_KeyUp;
}
private void myTextBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (toClear)
{
myTextBox.Text = myTextBox.Text.Substring(0, 1);
myTextBox.SelectionStart = 1;
toClear = false;
}
}
感谢您的帮助Romasz和您的代码示例,它修复了我最初的问题,因此现在如果我点击空格或零,它将用“”或“0”填充文本框,非常好
我唯一的问题是,如果我按shift键(或按return键)获取大写键盘(如果我在标签为“Name”的文本框中键入),它会清除文本框,但会显示大写字母“N”。我会继续努力的。再次感谢
编辑
这似乎已经修复了它,添加到KeyUp事件中
string KeyString = e.Key.ToString();
if (KeyString == "Shift" || KeyString == "Enter")
{
return;
}
谢谢,但我不能这样做,因为当文本框获得焦点时,我仍然希望显示标签。因此,在他们开始输入之前,“名称”文本框仍将包含名称,这时我需要清除它。为什么这是如此糟糕的做法?这并没有让我感到困惑,这意味着我的变量仍然是大写的。这是一种不好的做法,因为你可能会有很多文本框,这会让你感到困惑。我对文本框使用的标准做法是在文本框包含的任何内容的前面附加“tb”。例如,tbName、tbEmail、tbPhone等……这样就没有混淆的余地,您知道它是什么类型的控件,以及其中包含的数据的一般类型。@xceed所以我添加了一个编辑,它应该适合您的需要。TextBox是类的一种类型,应该像它一样使用,否则您将看到in会在代码中产生很多混乱。请注意,一个类可以有一个静态方法/变量,您将访问MyClass.variable-您不需要对象来访问它。它将解决下一个问题,因为它将防止TexBox被清除(您还应该处理其他键)。如果(e.Key==Key.Shift | | e.Key==Key.Enter)返回,就可以做得更简单:代码>。很高兴你能解决所有的问题。当它可用时,别忘了将答案标记为解决方案,这样它就不会再无法解决。谢谢,这样更好。
string KeyString = e.Key.ToString();
if (KeyString == "Shift" || KeyString == "Enter")
{
return;
}