我有一个文本框。离开文本框后,第一个字符应该是大写字母。三个事件的工作方式相同。它们是离开、验证和验证。
if (txtLocl.Text.Length > 0)
txtLocl.Text = txtLocl.Text.Substring(0, 1).ToUpper() + txtLocl.Text.Substring(1);
我应该使用这 3 个事件中的哪个事件?
我有一个文本框。离开文本框后,第一个字符应该是大写字母。三个事件的工作方式相同。它们是离开、验证和验证。
if (txtLocl.Text.Length > 0)
txtLocl.Text = txtLocl.Text.Substring(0, 1).ToUpper() + txtLocl.Text.Substring(1);
我应该使用这 3 个事件中的哪个事件?
您可以订阅Control.Leave
当控件失去焦点时将触发的事件。最初,我认为 usingControl.LostFocus
将是最适合使用的事件,但它无法通过设计器获得,这意味着您需要手动订阅该事件,这在我看来有点丑陋和非常规。
private void inputTextBox_Leave(object sender, EventArgs e)
{
if (inputTextBox.Text != string.Empty)
{
string input = inputTextBox.Text;
inputTextBox.Text = input.First().ToString(CultureInfo.InvariantCulture).ToUpper() +
string.Join(string.Empty, input.Skip(1));
}
}
你听起来很感兴趣Control.Validating
。using 的优点Control.Validating
是您可以利用事件处理程序的给定参数;CancelEventArgs
并将Cancel
属性设置为 true。这将阻止控件失去焦点并强制用户输入有效值。我认为这不适合您的应用程序,因为除了格式化输入之外,您并没有真正验证任何内容。
private void inputTextBox_Validating(object sender, CancelEventArgs e)
{
if (inputTextBox.Text == string.Empty)
{
statusLabel.Text = "The given input is not valid.";
e.Cancel = true;
}
}
请记住,当表单关闭时,所有控件随后都会失去焦点并Control.Validating
触发事件,这可能会阻止表单关闭,直到所有字段都通过其相关验证检查。如果您发现自己需要避免这种行为,快速搜索将占上风。
还有许多其他活动。
正如MSDN所说,当您通过使用键盘(TAB、SHIFT+TAB 等)、调用 Select 或 SelectNextControl 方法或将 ContainerControl.ActiveControl 属性设置为当前窗体来更改焦点时,会发生焦点事件按以下顺序:
1) Enter
2) GotFocus
3) Leave
4) Validating
5) Validated
6) LostFocus
当您使用鼠标或调用 Focus 方法更改焦点时,焦点事件按以下顺序发生:
1) Enter
2) GotFocus
3) LostFocus
4) Leave
5) Validating
6) Validated
如果 CausesValidation 属性设置为 false,则会抑制 Validating 和 Validated 事件。
您可能想要订阅 LostKeyboardFocus 事件(在 WPF 中)或 Leave 事件(在 WF 中)。
我建议使用 Leave,因为我假设您没有验证该值,而是对其进行格式化。Validating 和 Validated 应分别包含验证代码和验证的后果,IMO。
textBox1_Leave 适合您。
在此处查看有关文本框的事件和描述>>
http://msdn.microsoft.com/en-us/library/system.windows.forms.textbox_events.aspx
希望它有帮助。