悬停并单击时更改标签的颜色
Change color of label when hover and clicked
我在更改标签外观方面遇到了问题。这是屏幕截图:
这是鼠标悬停时的颜色,我想要这样。
我想要的是当我点击它时它保持那种颜色。但是由于我的 mouseleave 控件,它不会像我想要的那样工作。
代码如下:
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
}
我也试过鼠标悬停。它看起来和鼠标输入一样。
底线是我希望当鼠标悬停在它们上方时颜色变为较深的颜色,而当鼠标悬停在它们上方时颜色变回较浅的颜色。但是当我点击它时,我也让它保持深色。然后转回较浅的颜色,然后我单击另一个按钮,另一个按钮现在将变成较深的颜色。谢谢!
编辑:我使用标签而不是按钮。我目前正在尝试下面的一些评论,非常感谢。
您可以在单击按钮时删除事件处理程序 btnArchives_MouseLeave 和 button1_MouseEnter 以防止它发生。但是你需要在再次点击按钮时将其添加回来:
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);
}
也许在 btnArchives_mouseLeave 事件处理程序中添加一个 'if'
喜欢:
{
if(!btnArchives.IsClicked())
{
btnArchives.BackColor = Color.FromArgb(15, 34, 28);//lightercolor
}
}
或:
在 PressEvent
上删除 EventHandler
private void btnArchives_MouseClick(object sender, EventArgs e)
{
btnArchives.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
btnArchives.OnMouseLeave-= btnArchives_MouseLeave
}
我喜欢第一个..
我使用了这种技术,刚刚对其进行了测试,我认为它就是您想要的。
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
。
您可以在 OnClick 事件中保存您的选择 Label
。
如果选择了其他方法,请检查它。
像这样:
private void label_MouseClick(object sender, MouseEventArgs e)
{
var label = (Label)sender;
if (label == this.selectedLabel || this.selectedLabel == null) return;
this.selectedLabel.BackColor = Color.FromArgb(15, 34, 53); //lightercolor
this.selectedLabel= label;
}
private void label_MouseLeave(object sender, EventArgs e)
{
var label = (Label)sender;
if (label == this.selectedLabel || this.selectedLabel == null) return;
label.BackColor = Color.FromArgb(15, 34, 53); //lightercolor
}
private void label_MouseEnter(object sender, EventArgs e)
{
var label = (Label)sender;
label.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
}
请注意,这是通用的,您应该将相同的方法添加到 所有 您的标签
这也将确保当您单击一个标签时,另一个标签将被取消选择。
在你的 class 中添加一个 private Label selectedLabel
private string activeLabel;
private void btnArchives_Click(object sender, EventArgs e)
{
activeLabel = btnArchives.Text;
}
private void btnArchives_MouseEnter(object sender, EventArgs e)
{
lblArchives.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
}
private void btnArchives_MouseLeave(object sender, EventArgs e)
{
if (activeLabel = btnArchives.Text)
{
lblArchives.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
}
else
{
lblArchives.BackColor = Color.FromArgb(15, 34, 53); //lightercolor
}
}
没有检测标签是否被点击的函数,所以你使用一个全局字符串变量来收集当前点击的标签。然后如果标签是当前点击的,则使前景色变暗,否则 return 回到较浅的颜色。
我在更改标签外观方面遇到了问题。这是屏幕截图:
这是鼠标悬停时的颜色,我想要这样。 我想要的是当我点击它时它保持那种颜色。但是由于我的 mouseleave 控件,它不会像我想要的那样工作。
代码如下:
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
}
我也试过鼠标悬停。它看起来和鼠标输入一样。 底线是我希望当鼠标悬停在它们上方时颜色变为较深的颜色,而当鼠标悬停在它们上方时颜色变回较浅的颜色。但是当我点击它时,我也让它保持深色。然后转回较浅的颜色,然后我单击另一个按钮,另一个按钮现在将变成较深的颜色。谢谢!
编辑:我使用标签而不是按钮。我目前正在尝试下面的一些评论,非常感谢。
您可以在单击按钮时删除事件处理程序 btnArchives_MouseLeave 和 button1_MouseEnter 以防止它发生。但是你需要在再次点击按钮时将其添加回来:
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);
}
也许在 btnArchives_mouseLeave 事件处理程序中添加一个 'if' 喜欢:
{
if(!btnArchives.IsClicked())
{
btnArchives.BackColor = Color.FromArgb(15, 34, 28);//lightercolor
}
}
或: 在 PressEvent
上删除 EventHandler private void btnArchives_MouseClick(object sender, EventArgs e)
{
btnArchives.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
btnArchives.OnMouseLeave-= btnArchives_MouseLeave
}
我喜欢第一个..
我使用了这种技术,刚刚对其进行了测试,我认为它就是您想要的。
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
。
您可以在 OnClick 事件中保存您的选择 Label
。
如果选择了其他方法,请检查它。
像这样:
private void label_MouseClick(object sender, MouseEventArgs e)
{
var label = (Label)sender;
if (label == this.selectedLabel || this.selectedLabel == null) return;
this.selectedLabel.BackColor = Color.FromArgb(15, 34, 53); //lightercolor
this.selectedLabel= label;
}
private void label_MouseLeave(object sender, EventArgs e)
{
var label = (Label)sender;
if (label == this.selectedLabel || this.selectedLabel == null) return;
label.BackColor = Color.FromArgb(15, 34, 53); //lightercolor
}
private void label_MouseEnter(object sender, EventArgs e)
{
var label = (Label)sender;
label.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
}
请注意,这是通用的,您应该将相同的方法添加到 所有 您的标签
这也将确保当您单击一个标签时,另一个标签将被取消选择。
在你的 class 中添加一个 private Label selectedLabel
private string activeLabel;
private void btnArchives_Click(object sender, EventArgs e)
{
activeLabel = btnArchives.Text;
}
private void btnArchives_MouseEnter(object sender, EventArgs e)
{
lblArchives.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
}
private void btnArchives_MouseLeave(object sender, EventArgs e)
{
if (activeLabel = btnArchives.Text)
{
lblArchives.BackColor = Color.FromArgb(9, 18, 28); //darkercolor
}
else
{
lblArchives.BackColor = Color.FromArgb(15, 34, 53); //lightercolor
}
}
没有检测标签是否被点击的函数,所以你使用一个全局字符串变量来收集当前点击的标签。然后如果标签是当前点击的,则使前景色变暗,否则 return 回到较浅的颜色。