Mik*_*ebb 6 c# animation textbox backcolor winforms
我所拥有的是一个Windows窗体,在C#中,有7个文本框.当其值更改并被接受时,每个文本框都会更新2或3个其他文本框.我想要做的是以某种方式采取那些需要更新的文本框,并使用浅色或其他东西使它们"闪烁".目的是向用户显示正在更新的内容,增加了一点天赋.
我不确定是否有一种简单的方法可以做到这一点,这就是我在这里问的原因.我可以使用计时器,while循环和背面颜色,文本框上的alpha通道递减控制背面颜色,我想,但我想看看是否有更好的方法.
jQuery UI有一个"突出显示"效果,显示我想要完成的任务(虽然我希望我的速度有点慢).只需转到jQuery UI Effects Demo页面,从窗口的下拉框中选择"highlight",然后单击"Run Effect".
编辑
我必须根据我的时间和资源限制使用我自己的解决方案,但文本框不支持Hans Passant提到的透明颜色.所以,我使用了一个自动停止计时器来增加R,G和B值,直到控制器完全变白(R = 255,G = 255,B = 255);
编辑2
在我们更新到.NET 4.0之后,使用George Johnston解决方案的变体将Flash事件重新编码为扩展方法.我觉得这是一个更清洁的解决方案,并且扩展方法可以让任何人自动使用using它.
Geo*_*ton 11
您可以为每个闪烁的文本框分离一个单独的线程,以免在您的文本框闪烁期间阻止您的表单被使用.一定要调用您的表单,因为线程的旋转将需要交叉线程.完整解决方案如下
private void Form1_Load(object sender, EventArgs e)
{
// textBox1 is the control on your form.
// 1000 is the total interval between flashes
// Color.LightBlue is the flash color
// 10 is the number of flashes before the thread quits.
Flash(textBox1, 1000,Color.LightBlue,10);
Flash(textBox2, 1500,Color.Green,10);
Flash(textBox3, 100,Color.Red,10);
Flash(textBox4, 500,Color.Brown,10);
Flash(textBox5, 200,Color.Pink,10);
}
public void Flash(TextBox textBox, int interval, Color color, int flashes)
{
new Thread(() => FlashInternal(textBox, interval, color, flashes)).Start();
}
private delegate void UpdateTextboxDelegate(TextBox textBox, Color originalColor);
public void UpdateTextbox(TextBox textBox, Color color)
{
if (textBox.InvokeRequired)
{
this.Invoke(new UpdateTextboxDelegate(UpdateTextbox), new object[] { textBox, color });
}
textBox.BackColor = color;
}
private void FlashInternal(TextBox textBox, int interval, Color flashColor, int flashes)
{
Color original = textBox.BackColor;
for (int i = 0; i < flashes; i++)
{
UpdateTextbox(textBox, flashColor);
Thread.Sleep(interval/2);
UpdateTextbox(textBox, original);
Thread.Sleep(interval/2);
}
}
Run Code Online (Sandbox Code Playgroud)
这样可以避免在表单上放置支持计时器控件.
| 归档时间: |
|
| 查看次数: |
6926 次 |
| 最近记录: |