我有以下功能:
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);
}
}
我的TextBox最初将标签设置为.Text属性。当用户点击TextBox时,我希望光标移动到开头,然后当他们开始输入标签时消失。
这是正常的,但问题是当我点击零时,TextBox填充“D0”。它也没有正确处理外壳,这就是我添加ToLower调用的原因。我只想让TextBox清除自己,然后用正确的大小写显示用户点击的内容。其他如何无法正常工作的示例是,如果我点击空格键,它将显示“空格”。
有什么想法吗?
答案 0 :(得分:1)
如果我理解正确 - “我只是希望TextBox清除自己,然后用正确的大小写显示用户点击的内容。” - 您不需要处理KeyDown
事件。尝试使用GotFocus
insted:
myTextBox.GotFocus += (s, e) =>
{
myTextBox.Text = "";
};
当用户开始输入时,上面的这个简单代码将清除该字段。您无需处理KeyDown
- 当用户按下键时,TextBox会自动填充。
BTW - 使用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;
}
}
答案 1 :(得分:0)
private bool ClearTextBox = false;
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
TextBox tbSender = (TextBox)sender;
if (tbSender.Text == "Name" ||
tbSender.Text == "E-mail address" ||
tbSender.Text == "Confirm e-mail" ||
tbSender.Text == "Mobile number" ||
tbSender.Text == "Password")
{
tbSender.Foreground = new SolidColorBrush(Colors.LightGray);
tbSender.Select(0, 0);
tbSender.SelectionStart = 0;
ClearTextBox = true;
}
else
{
tbSender.Select(tbSender.Text.Length, 0);
}
}
private void TextBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
TextBox tbSender = (TextBox)sender;
if (ClearTextBox)
{
tbSender.Foreground = new SolidColorBrush(Colors.Black);
tbSender.Text = tbSender.Text.Substring(0, 1);
tbSender.SelectionStart = 1;
ClearTextBox = false;
}
}
感谢您的帮助Romasz和您的代码示例,它解决了我的初始问题所以现在如果我点击空格或零,它将用''或'0'填充文本框,很棒。
我遇到的唯一问题是如果我按shift(或返回那个问题)来获得大写键盘(如果我在文本框中键入标签'Name'),它会清除文本框但显示一个资本'N'。我会继续努力。再次感谢。
修改强>
这似乎修复了它,添加到KeyUp事件中。
string KeyString = e.Key.ToString();
if (KeyString == "Shift" || KeyString == "Enter")
{
return;
}