C# 关于支持不透明度的按钮的实施建议
在C#中,我没有找到一种方法来创建一个支持不透明度的按钮——而不是在调用show方法时出现,以便能够将其慢慢淡入视图 我创建了自己的按钮,我想知道您对实现的看法 基本上,我创建了一个Windows窗体,它支持不透明度属性,并处理了所有关于将窗体“添加”到另一个窗体的情况,具体来说: -位置更改事件 -所有者窗体失去焦点 表单由一个表示按钮文本的标签组成,仅此而已 表单构造函数获取标签的文本、按钮的所需大小以及按钮出现的速度(基于枚举)。 在<强>表单加载方法< /强>中,标签位于按钮的中间。 单击标签或表单本身时将执行一个简单的图形,并向捕获它的人引发一个事件 我的代码:C# 关于支持不透明度的按钮的实施建议,c#,winforms,button,implementation,opacity,C#,Winforms,Button,Implementation,Opacity,在C#中,我没有找到一种方法来创建一个支持不透明度的按钮——而不是在调用show方法时出现,以便能够将其慢慢淡入视图 我创建了自己的按钮,我想知道您对实现的看法 基本上,我创建了一个Windows窗体,它支持不透明度属性,并处理了所有关于将窗体“添加”到另一个窗体的情况,具体来说: -位置更改事件 -所有者窗体失去焦点 表单由一个表示按钮文本的标签组成,仅此而已 表单构造函数获取标签的文本、按钮的所需大小以及按钮出现的速度(基于枚举)。 在表单加载方法< /强>中,标签位于按钮的中间。 单击标签
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;
Oz.我对一个改变高度的windows窗体做了类似的操作。我这样做的方式是在代码中实现一个计时器,这样每半秒不透明度就会改变一次 如果没有您的代码,下面的答案不是100%正确的,但很难向您展示
void timer_Tick(object sender, EventArgs e)
{
if (btnName.Opacity < 100)
{
btnName.Opacity++;
timer2.Stop();
timer2.Interval = 5000;
timer2.Start();
} else {
timer2.Stop();
}
}
void timer\u Tick(对象发送方,事件参数e)
{
如果(btnName.Opacity<100)
{
btnName.Opacity++;
timer2.Stop();
时间间隔=5000;
timer2.Start();
}否则{
timer2.Stop();
}
}
检查这个不错的方法,但如果我理解正确,它并不完全是我需要的-这是一个支持不透明度的控件,我需要一个不透明度淡入淡出控件有趣的方法,但是我相信这将意味着当前线程将持续忙碌,如果您使用后台工作人员,您可能会报告进度,然后以这种方式更新不透明度。如果你想,我可以发布代码,你的意思是一个背景线会画按钮?很好。虽然我喜欢在我的应用程序中使用更少的计时器,但这总比打开一个线程要好。您对我的实现有何看法?您能发布实现代码吗?因为我更容易理解代码:)
this.Location = new Point(
this.Location.X - (ParentFormLocation.X - newLocation.X),
this.Location.Y - (ParentFormLocation.Y - newLocation.Y));
ParentFormLocation = newLocation;
void timer_Tick(object sender, EventArgs e)
{
if (btnName.Opacity < 100)
{
btnName.Opacity++;
timer2.Stop();
timer2.Interval = 5000;
timer2.Start();
} else {
timer2.Stop();
}
}