You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多个TextBox统一编写Enter/Leave事件并获取控件名称

通用处理TextBox的Enter和Leave事件方案

1. 编写通用Enter事件处理方法

这个方法会统一处理所有TextBox的进入事件:清空文本、定位并显示虚拟数字键盘:

private void TextBox_Enter(object sender, EventArgs e)
{
    // 将触发事件的控件转换为TextBox类型
    TextBox currentTextBox = sender as TextBox;
    if (currentTextBox == null) return;

    // 清空当前TextBox的文本
    currentTextBox.Text = string.Empty;
    // 设置虚拟键盘位置在TextBox右侧(和你原逻辑一致)
    vnumPadForm.Location = PointToScreen(new Point(currentTextBox.Right, currentTextBox.Top));
    // 显示虚拟键盘窗体
    vnumPadForm.Show();

    // 若需获取触发事件的TextBox名称,直接取Name属性
    string textBoxName = currentTextBox.Name;
    // 可根据名称添加不同TextBox的特殊处理逻辑
}

2. 编写通用Leave事件处理方法

统一处理所有TextBox的离开事件,隐藏虚拟键盘:

private void TextBox_Leave(object sender, EventArgs e)
{
    // 隐藏虚拟数字键盘窗体
    vnumPadForm.Hide();
}

3. 绑定事件到所有TextBox

有两种方式完成绑定:

  • 设计器绑定:选中每个TextBox,在属性窗口的事件列表中,将Enter事件选择为TextBox_Enter,Leave事件选择为TextBox_Leave。
  • 代码批量绑定:在窗体的Load事件里遍历所有TextBox,自动绑定事件(适合TextBox数量较多的场景):
private void YourForm_Load(object sender, EventArgs e)
{
    // 遍历窗体上的所有控件
    foreach (Control control in this.Controls)
    {
        // 判断是否为TextBox控件
        if (control is TextBox textBox)
        {
            // 绑定通用事件
            textBox.Enter += TextBox_Enter;
            textBox.Leave += TextBox_Leave;
        }
    }
}

这样就无需为每个TextBox编写重复的事件代码,实现了和你参考的按钮统一事件一样的高效处理逻辑。

内容的提问来源于stack exchange,提问作者saptech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:50:22