首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在悬停和单击时更改标签的颜色

问在悬停和单击时更改标签的颜色
EN

Stack Overflow用户
提问于 2017-02-06 08:46:39
回答 5查看 10.2K关注 0票数 4

我在改变标签的外观方面有问题。这是截图:

​

​

这是当你悬停鼠标时的颜色,我想要它那样。我想要的是当我点击它的时候,它能保持这样的颜色。但是因为我的鼠标控制,它不会像我想要的那样工作。

以下是代码:

代码语言:javascript
复制
   private void btnArchives_MouseEnter(object sender, EventArgs e)
    {
        lblArchives.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
    }

   private void btnArchives_MouseLeave(object sender, EventArgs e)
   {
       lblArchives.BackColor = Color.FromArgb(15, 34, 53); //lightercolor
   }

我也试过鼠标悬停。不过,它看上去和鼠标一样。底线是,我希望颜色改变为更深的颜色时,悬浮在他们之上,并改变回到较轻的颜色,当他们悬浮出来。但是当我点击它的时候,我也会保持深色。然后转回较浅的颜色,然后我点击另一个按钮,另一个按钮现在将转到更深的颜色。谢谢!

编辑:我用标签代替按钮。我正在尝试下面的一些评论,非常感谢你。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-02-06 09:03:45

我使用这个技术,刚刚测试了它,我认为这是你想要的。

代码语言:javascript
复制
    Label clickedLabel;
    private void mouseEnter(object sender, EventArgs e)
    {
        Label theLabel = (Label)sender;
        if (theLabel != clickedLabel)
            theLabel.BackColor = Color.Red;
    }

    private void mouseLeave(object sender, EventArgs e)
    {
        Label theLabel = (Label)sender;
        if (theLabel != clickedLabel)
            theLabel.BackColor = Color.Yellow;
    }

    private void labelClick(object sender, EventArgs e)
    {
        setColor();//Calling this here so clickedLabel is still the old value
        Label theLabel = (Label)sender;
        clickedLabel = theLabel;
    }

    public void setColor()
    {
        if(clickedLabel != default(Label))
            clickedLabel.BackColor = Color.Yellow;
        //Resetting clicked label because another (or the same) was just clicked.
    }

解释:

这些事件只被设置为标签,因此我们可以执行(Label)sender,这意味着激活事件的标签。我创建了一个Label clickedLabel变量,并将其设置为单击的标签,一旦单击了另一个变量,变量就会改变,检查就会正常工作。

这个方法的最佳之处在于,无论您有多少标签,您都不会将它们仅作为sender来引用。

票数 4
EN

Stack Overflow用户

发布于 2017-02-06 08:55:45

当单击按钮以防止事件处理程序btnArchives_MouseLeave和button1_MouseEnter时,您可以删除它们。但是,当再次单击按钮时,您需要将其添加回:

代码语言:javascript
复制
private void btnArchives_Click(object sender, EventArgs e)
{
            if (!clicked)
            {
                btnArchives.MouseEnter-= new EventHandler(btnArchives_MouseEnter);
                btnArchives.MouseLeave-= new EventHandler(btnArchives_MouseLeave);
                clicked = true;
                return;
            }

            btnArchives.MouseEnter += new EventHandler(btnArchives_MouseEnter);
            btnArchives.MouseLeave += new EventHandler(btnArchives_MouseLeave);
            clicked = false;
  }

  void btnArchives_MouseLeave(object sender, EventArgs e)
  {
              this.btnArchives.BackColor = Color.FromArgb(15, 34, 53);
  }

  void btnArchives_MouseEnter(object sender, EventArgs e)
  {
              this.btnArchives.BackColor = Color.FromArgb(9, 18, 28);
  }
票数 2
EN

Stack Overflow用户

发布于 2017-02-06 09:01:50

可以在btnArchives_mouseLeave EventHandler中添加“if”,例如:

代码语言:javascript
复制
{
     if(!btnArchives.IsClicked())
     {
          btnArchives.BackColor = Color.FromArgb(15, 34, 28);//lightercolor
     }
}

或:删除EventHandler on PressEvent

代码语言:javascript
复制
  private void btnArchives_MouseClick(object sender, EventArgs e)
  {
    btnArchives.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
    btnArchives.OnMouseLeave-= btnArchives_MouseLeave
  }

我喜欢第一个..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42063585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档