我有关于更改标签外观的问题。这是截图:
这是你悬停鼠标时的颜色,我希望它像那样。 我想要的是它在我点击它时保持这种颜色。但由于我的鼠标控制,它不会像我想要的那样工作。
以下是代码:
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
}
我也试过鼠标悬停。虽然它看起来和鼠标一样。 底线是我希望颜色在悬停在它们上方时变为较暗的颜色,并在悬浮出来时变回较浅的颜色。但是当我点击它时,我也会保持深色。然后转回较浅的颜色然后我点击另一个按钮,其他按钮现在将变为更暗的颜色。谢谢!
编辑:我使用标签代替按钮。我正在尝试下面的一些评论,非常感谢你。答案 0 :(得分:2)
您可以在单击按钮时删除事件处理程序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);
}
答案 1 :(得分:2)
可能会添加一个' if'在btnArchives_mouseLeave EventHandler中 像:
{
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
}
我喜欢第一个..
答案 2 :(得分:2)
我使用这种技术,只是测试它,我认为它是你想要的。
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
引用。
答案 3 :(得分:1)
您可以在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
}
请注意,这是通用的,您应该将相同的方法添加到所有您的标签中 这也将确保当您单击一个标签时,将取消选择另一个标签。
在课堂上添加private Label selectedLabel
答案 4 :(得分:0)
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
}
}
没有检查标签是否被单击的功能,因此,您使用全局字符串变量来收集当前单击的标签。如果标签是当前单击的标签,则使前色变深,否则返回浅色。