在Vista/7中,Windows资源管理器外壳窗口使用一种特殊的静态进度条来显示硬盘空间.
使用默认样式时,此栏为蓝色且未设置动画.当它接近满(低磁盘空间)时,它也会变成红色.
使用消息传递,我可以告诉Windows Forms ProgressBar控件将其状态更新为Paused和Error(分别为黄色和红色),这样可以正常工作,但这些仍然是特定于进度的.
在Windows用户体验指南中,它特别指出了进度条的这个"米"变体:
此模式不是进度条,但它是使用进度条控件实现的.仪表具有独特的外观,可以将它们与真正的进度条区分开来.
他们说它"是使用进度条控件实现的",所以......怎么样?我可以向控件发送什么消息让它以这种方式运行?
我已经看到你可以发送用于设置条形颜色的消息,但文档说在启用视觉样式时会忽略这些调用.原始ProgressBar控件的Windows API文档中没有任何其他内容似乎提示了一种方法.我只是坚持制作一个自定义绘制栏?我真的很想尽可能利用操作系统,以便应用程序在不同的操作系统版本中显得一致.我意识到Vista之前的版本可能不会支持这一点.
我正在寻找一个Windows窗体的解决方案,但我不知道,如果它甚至暴露在所有通过的Win32 API.
我正在尝试更改进度条的颜色,我正在使用它作为密码强度验证器.例如,如果所需的密码较弱,则进度条将变为黄色,如果为中,则为绿色.坚强,橙色.非常强烈,红色.就是这样的.这是密码强度验证器的代码:
using System.Text.RegularExpressions;
using System.Drawing;
using System.Drawing.Drawing2D;
var PassChar = txtPass.Text;
if (txtPass.Text.Length < 4)
pgbPass.ForeColor = Color.White;
if (txtPass.Text.Length >= 6)
pgbPass.ForeColor = Color.Yellow;
if (txtPass.Text.Length >= 12)
pgbPass.ForeColor = Color.YellowGreen;
if (Regex.IsMatch(PassChar, @"\d+"))
pgbPass.ForeColor = Color.Green;
if (Regex.IsMatch(PassChar, @"[a-z]") && Regex.IsMatch(PassChar, @"[A-Z]"))
pgbPass.ForeColor = Color.Orange;
if (Regex.IsMatch(PassChar, @"[!@#\$%\^&\*\?_~\-\(\);\.\+:]+"))
pgbPass.ForeColor = Color.Red;
Run Code Online (Sandbox Code Playgroud)
这pgbPass.ForeColor = Color.ColorHere似乎不起作用.有帮助吗?谢谢.