当我尝试更改“面板”和“标签”的背景颜色时,它们似乎彼此之间的变化速度稍慢。
尽管两者都设置为在“面板”和“标签”的“输入/离开”时都进行更改,但是我发现更改时仅相差了半秒。
有人知道我如何才能让它们在相同的时间同时更改,而不管鼠标在哪一个上?
private void panel3_MouseEnter(object sender, EventArgs e)
{
panel3.BackColor = Color.FromArgb(125, 170, 170, 170);
label2.BackColor = System.Drawing.Color.Transparent;
}
private void panel3_MouseLeave(object sender, EventArgs e)
{
panel3.BackColor = Color.FromArgb(125, 45, 45, 45);
label2.BackColor = System.Drawing.Color.Transparent;
}
private void label2_MouseEnter(object sender, EventArgs e)
{
panel3.BackColor = Color.FromArgb(125, 170, 170, 170);
label2.BackColor = System.Drawing.Color.Transparent;
}
private void label2_MouseLeave(object sender, EventArgs e)
{
panel3.BackColor = Color.FromArgb(125, 45, 45, 45);
label2.BackColor = System.Drawing.Color.Transparent;
}
这是它在做什么的一个例子。例
我认为由于背景图像/父容器的绘制,您将不断出现这种闪烁,正如我从您的Example中看到的那样。请考虑通过子类使用双缓冲控件以减少闪烁。
class DBPanel : Panel
{
public DBPanel()
{
DoubleBuffered = true;
}
}
当您尝试创建类似的GUI时,我建议创建一个自定义控件,该控件将面板和标签结合在一起,并且还支持双缓冲。
例:
class FancyLabel : Panel
{
private bool IsMouseEntered;
public FancyLabel()
{
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.SupportsTransparentBackColor, true);
DoubleBuffered = true;
UpdateStyles();
BackColor = Color.Transparent;
ForeColor = Color.FromArgb(205, 205, 205);
}
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
IsMouseEntered = true;
Invalidate();
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
IsMouseEntered = false;
Invalidate();
}
[System.ComponentModel.Bindable(true)]
[System.ComponentModel.Browsable(true)]
public override string Text { get => base.Text; set => base.Text = value; }
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics G = e.Graphics;
G.SmoothingMode = SmoothingMode.HighQuality;
G.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
SolidBrush bkBrush = IsMouseEntered ? new SolidBrush(Color.FromArgb(125, 170, 170, 170)) : new SolidBrush(Color.FromArgb(125, 45, 45, 45));
Rectangle rec = new Rectangle(0, 0, Width - 1, Height - 1);
G.FillRectangle(bkBrush, rec);
SolidBrush txtBrush = new SolidBrush(ForeColor);
StringFormat sf = new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
G.DrawString(Text, Font, txtBrush, rec, sf);
bkBrush.Dispose();
txtBrush.Dispose();
sf.Dispose();
}
}
祝好运。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句