【问题标题】:Highlighting a textbox from a mouse click OR tab-key press in C# Windows Form在 C# Windows 窗体中通过鼠标单击或 tab 键突出显示文本框
【发布时间】:2020-10-05 14:34:03
【问题描述】:

我正在尝试以黄色突出显示表单上的活动文本框。我总共有 60 个文本框。因此,我的想法是,当用户按下文本框时,背景颜色应变为黄色,或者如果用户按下选项卡,则它进入的任何文本框也应变为黄色。我让鼠标单击一个工作,但我无法让 Tab 键按下进入文本框工作。我真的需要进入文本框的 tab 键入口才能工作,因为我的 tab 索引完美排列,所以有一个自然的流程。 这是我拥有的当前代码,可用于通过鼠标单击所需的文本框(在事件 Enter 上)突出显示文本框:

private void tbAll_Enter(object sender, EventArgs e)
{
    foreach (Control tb in this.Controls)
    {
        if (tb is TextBox)
        {
            if (tb.Focused == true)
            {
            ((TextBox)tb).BackColor = System.Drawing.Color.Yellow;
            }
        }
    }
}

但是,如果我按 Tab 键进入文本框,它不会突出显示黄色,但我刚刚离开的前一个字段会突出显示黄色。有人知道这个问题的原因和解决方法吗?

【问题讨论】:

    标签: c# winforms loops event-handling


    【解决方案1】:

    使用EnterLeave 事件 - 将所有文本框挂钩到EnterLeave 的相同事件处理程序,并使用Sender 参数将背景颜色更改为黄色/白色(取决于事件)。

    这样的事情应该可以帮助您入门:

    private void TextBox_Enter(Object sender, EventArgs e) 
    {
       ((TextBox)sender).BackColor = Color.Yellow;
    }
    
    private void TextBox_Leave(Object sender, EventArgs e) 
    {
       ((TextBox)sender).BackColor = Color.White;
    }
    

    这样,无论用户是通过单击鼠标还是按下选项卡按钮进入文本框 - 一旦文本框获得焦点,它将获得黄色背景,并且一旦另一个控件获得焦点,它将恢复为白色。

    【讨论】:

    • 好主意。这很完美,没想到使用比 for 循环更简单/实用的发件人对象。谢谢!
    • 很高兴为您提供帮助 :-)
    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2014-11-23
    相关资源
    最近更新 更多