当前位置: 首页 > 编程语言 > C#

如何在使用C#更新Windows窗体中的文本框时编写“flash”效果?分享

时间:2023-04-11 00:44:16 C#

C#更新Windows窗体的文本框时,如何编写“flash”效果?我有一个Windows窗体,在C#中,有7个文本框。每个文本框在更改并接受其值时会更新2或3个其他文本框。我想做的是以某种方式获取那些需要更新的文本框,并使它们以浅色或其他方式“闪烁”。目的是向用户展示正在更新的内容,并增加一点风格。我不确定是否有一种简单的方法可以做到这一点,这就是我在这里问的原因。我可以使用计时器控制背景颜色,同时循环和背景颜色,文本框上的alpha通道减少,我想,但我想看看是否有更好的方法。jQueryUI有一个“高亮”效果,可以显示我正在努力完成的事情(尽管我希望我有点慢)。只需转到jQueryUIEffects演示页面,从窗口的下拉框中选择“Highlight”,然后单击“RunEffect”。编辑由于时间和资源限制,我不得不使用自己的解决方案,但文本框不支持HansPassant提到的透明颜色。所以,我使用自动停止定时器来增加R、G和B值,直到控制器完全变白(R=255,G=255,B=255);编辑2在我们更新到.NET4.0之后,使用GeorgeJohnston解决方案的变体,将Flash事件重新编码为扩展方法。我觉得这是一个更简洁的解决方案,扩展方法使它对任何使用它的人都是自动的。您可以为每个闪烁的文本框分开一个单独的线程,以免在文本框闪烁时阻止您使用表单。请务必调用您的表单,因为线程的旋转需要交叉线程。完整解决方案如下privatevoidForm1_Load(objectsender,EventArgse){//textBox1是表单上的控件。//1000是闪烁之间的总间隔//Color.LightBlue是闪烁颜色//10是线程退出前的闪烁次数。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);}publicvoidFlash(TextBoxtextBox,intinterval,Colorcolor,intflashes){newThread(()=>FlashInternal(textBox,interval,color,flashes)).Start();}privatedelegatevoidUpdateTextboxDelegate(TextBoxtextBox,ColororiginalColor);publicvoidUpdateTextbox(TextBoxtextBox,Colorcolor){if(textBox.InvokeRequired){this.Invoke(newUpdateTextboxDelegate(UpdateTextbox),newobject[]{textBox,color});}textBox.BackColor=颜色;}privatevoidFlashInternal(TextBoxtextBox,intinterval,ColorflashColor,int闪烁){Colororiginal=textBox.BackColor;for(inti=0;i这避免了在表单上放置一个支持计时器控件WPF似乎非常适合这个。您可以在WPF中构建它并在WinForms中将其用作HostedElement。添加新项目WPF用户控件,这是在xaml中:(它可以做一些工作,但它是一个开始)。你有它-一个花哨的文本框:)构建解决方案,新项目将出现在工具箱中-只需拖放到您的表单,WPF就会托管在ElementHost元素中。它的美妙之处在于您可以在WPF的视觉风格中做更多的事情,但它承载WPF,这会为您的解决方案增加一定的重量……从TextBox派生您自己的类。给它一个Flash()方法来开始闪烁。只需将BackColor更改为柔和的颜色。不要使用不适用于TextBox的alpha。您应该让此类的所有实例共享一个公共计时器,以便它们同时闪烁。使计时器静态并引用计数您拥有的实例数。在构造函数中添加,在Dispose(bool)override中向下。如果您已经开始使用WinForms,以我有限的知识,我建议您使用第三方控件来提供帮助。一些名称是Telerik和ComponentOne。如果你想要像WinForms这样的东西,你可以使用WPF,并在XAML中开发自定义动画(我认为在创建UI状态和动画方面类似于SilverlightXAML)。除了这些,我没有提供任何帮助的经验。根据您的应用程序,一种华而不实的方法是更改??文本框图像的伽马。这当然取决于你想投入多少时间,但这当然是可行的。我看过几个关于如何调整图像伽玛的教程,获取控件的图像是微不足道的。也就是说,我也认为将文本框的背景颜色设置为透明非常重要。根据你的措辞,我只能猜测你想从底层控件的背景颜色淡入文本框的背景颜色,在这种情况下,问题又是微不足道的。但是如果你有背景图片,你应该重新考虑。不过,这仍然是可能的,如果这就是您想要完成的目标,我可以为您找到有关操作方法的链接。一个快速简单的解决方案是将文本颜色和背景颜色从白色设置为当前的前景色。如果你对使用线程不感兴趣,基于GeorgeJohnston的回答,我的实现如下:如果分享的所有内容对你有用,并且你需要了解更多C#学习教程,希望你多多关注——--privateboolCurrentlyFlashing=false;privatevoidFlashInternal(TextBoxtextBox,intinterval,ColorflashColor,intflashes){if(CurrentlyFlashing)return;当前正在闪烁=真;原色=textBox.BackColor;for(inti=0;i本文收集自网络,不代表立场,如涉及侵权,请点右联系管理员删除,如需转载请注明出处: