我的目的是做一个按钮,当鼠标放在上面时按钮变为原来的两倍大小。我用一个继承自UserContorl的类来实现该功能,并且在上面放置了一个Label控件,用来显示提示文字。用下面的代码绑定控件的MouseEnter事件,当鼠标移动到控件上时大小确实变为原来的两倍,但再将鼠标移动到Label控件上时,按钮不停的闪烁,只要鼠标离开Label,就不闪,不知道什么原因,希望大家赐教。
public partial class UserControl1 : UserControl
{
//鼠标经过时发生的事件:大小变为原来的两倍
private void UserControl1_MouseEnter(object sender, EventArgs e)
{
this.Location = new Point(StartLocation.X-StartSize.Width/2,StartLocation.Y-StartSize.Height/2);
this.Size = new Size(StartSize.Width * 2, StartSize.Height * 2);
}
}
解决方案 »
- C# 窗体内所有控件随窗体大小自动调整问题
- Intelligencia.UrlRewriter问题,高手请进
- C#得到网页源码问题
- 急~~~请大家帮忙看下密文,是否为BASE64加密,如何解密.谢谢
- 我的UPDATE语法到底错在哪?谢谢帮忙。。
- 用C#写的存储过程如何获取输出参数?
- [求助] 异常详细信息: System.InvalidOperationException: .Net 数据 OLE DB 提供程序
- 为什么程序改动后一定要重新生成一下解决方案后再运行才能看到改动效果?
- 如何把样式表引用到所有WEBFROM中?
- C#中如何后台保存的时候将已知数据添加到数据库中
- 求一段正则表达式的写法!
- DataSet更新数据库的错误
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;namespace WindowsFormsApplication3
{
public class ButtonEx:Button
{
/// <summary>
/// 记录按钮在缩放前的大小
/// </summary>
private Size m_szButtonRect = Size.Empty;
/// <summary>
/// 按钮关联的ToolTip控件
/// </summary>
private ToolTip m_ttToolTipWindow = new ToolTip(); /// <summary>
/// 此按钮所关联的提示信息
/// </summary>
public string ToolTipText { get; set; } private void ShowToolTipText()
{
if (m_ttToolTipWindow == null) m_ttToolTipWindow = new ToolTip();
if (!string.IsNullOrEmpty(this.ToolTipText))
{
m_ttToolTipWindow.ToolTipIcon = ToolTipIcon.Info;
m_ttToolTipWindow.ToolTipTitle = "提示信息";
m_ttToolTipWindow.UseAnimation = true;
m_ttToolTipWindow.UseFading = true;
m_ttToolTipWindow.ShowAlways = true;
m_ttToolTipWindow.Show(this.ToolTipText, this,this.Location);
}
} private void HideToolTipText()
{
if (m_ttToolTipWindow != null)
{
m_ttToolTipWindow.Hide(this);
}
} protected override void OnMouseHover(EventArgs e)
{
base.OnMouseHover(e); ShowToolTipText();
} protected override void OnMouseEnter(EventArgs e)
{
//记录按钮原始大小
m_szButtonRect = this.Size; base.OnMouseEnter(e); //将按钮大小扩大一倍
this.Size = Size.Add(this.Size, this.Size);
} protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e); //离开时还原按钮大小
this.Size = m_szButtonRect; //离开时销毁ToolTip控件
HideToolTipText();
}
}
}
我给你现写了一个,不会出现你说的问题,你用的方法可能欠妥。
Size StartSize =new Size();
private void UserControl1_MouseEnter(object sender, EventArgs e)
{
this.Location = new Point(StartLocation.X - StartSize.Width / 2, StartLocation.Y - StartSize.Height / 2);
this.Size = new Size(StartSize.Width * 2, StartSize.Height * 2);
} private void UserControl1_Load(object sender, EventArgs e)
{
StartLocation = this.Location;
StartSize = this.Size;
}我用你的方法试,并没有闪烁现象。如果想要得到别人更详细的帮助,就请把你的问题更详细的描述出来。
你是不是还应该有个MouseLeave的事件处理程序来恢复控件的大小?如果是这样的话那问题可能出在控件里的Label上,当你鼠标进入控件大小改变没问题,但移入Label上就会引发控件的MouseLeave事件,从而恢复控件大小,但这时由于代码调整了控件的大小可能再一次使鼠标位于控件上再次引发MouseEnter(大小变为两倍,会使鼠标再一次位于Label上而引发MouseLeave),如此反复,所以会不停的闪。不知你听清明白没?