我没有在C#中找到一种方法来创建一个支持不透明度的按钮 - 而不是仅仅在调用show方法时出现,以便能够将其慢慢淡入视图。
我创建了自己的按钮,我想知道您对实现的看法。
基本上,我创建了一个Windows窗体,它支持opacity属性并处理了有关将表单“添加”到另一个窗体的所有角落案例,具体为: - 位置变更事件 - 所有者表格失去了焦点
表单由一个标签组成,该标签代表按钮的文本,而且都是。
表单构造函数获取标签的文本,按钮的所需大小和按钮的速度(基于枚举)出现。 在表单加载方法中,标签位于按钮的中间
当标签或表单本身点击时,会执行一个简单的图形,并将事件提交给抓住它的人。
我的代码:
构造
InitializeComponent();
this.Owner = owner;
_buttonText = buttonText;
_buttonSize = buttonSize;
_usedSpeedOpacity = SelectSpeedOpacity(showSpeed);
一种说明点击命令的方法 - 当用户点击表单和标签本身时调用:
this.Location = new Point(this.Location.X + 1, this.Location.Y);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
Thread.Sleep(50);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Location = new Point(this.Location.X - 1, this.Location.Y);
if (Button_Clicked != null)
{
Button_Clicked();
}
表单加载 - 将标签定位在控件等中间
labelButtonText.Text = _buttonText;
this.Size = _buttonSize;
double remainning = this.Width - labelButtonText.Size.Width;
Point labelNewLocation = new Point(
(int)(remainning / 2),
(int)(this.Height / 2 - this.Font.Height / 2));
labelButtonText.Location = labelNewLocation;
FadeShow(与FadeHide相同)
int tempCounter = 0;
Opacity = 0;
Show();
while (tempCounter <= 1000)
{
if (Opacity == 1.0)
{
break;
}
if (tempCounter % 10 == 0)
{
Opacity += _usedSpeedOpacity;
}
Refresh();
tempCounter++;
}
this.Visible = true;
this.BringToFront();
更新位置方法,以便在父窗体移动时调用此方法
this.Location = new Point(
this.Location.X - (ParentFormLocation.X - newLocation.X),
this.Location.Y - (ParentFormLocation.Y - newLocation.Y));
ParentFormLocation = newLocation;
我的button_click事件
提前致谢,
盎司。
答案 0 :(得分:0)
我做了一些与窗体相似的东西,改变了它的高度。我这样做的方法是在代码中实现一个计时器,这样每隔半秒就会改变不透明度。
虽然以下不是100%正确答案,但没有您的代码很难向您展示。
void timer_Tick(object sender, EventArgs e)
{
if (btnName.Opacity < 100)
{
btnName.Opacity++;
timer2.Stop();
timer2.Interval = 5000;
timer2.Start();
} else {
timer2.Stop();
}
}