Windows Forms ErrorProvider自定义图标重叠问题求助
解决ErrorProvider自定义图标重叠问题
嘿,我来帮你搞定这个图标重叠的麻烦!首先得弄明白为啥会这样:当你用了多个ErrorProvider组件,而且它们都指向同一个控件(或者控件挨得近、图标默认位置一致),再加上你设置了BlinkStyle = NeverBlink,默认情况下所有ErrorProvider的图标都会挤在控件的同一个位置(大多是右侧),可不就叠在一起了嘛。
方案1:给每个ErrorProvider的图标安排不同位置
最简单的办法就是调整每个ErrorProvider的IconAlignment和IconPadding属性,让图标错开显示。比如你可以这么设置:
// 初始化ErrorProvider时配置位置 _errorProvider1.Icon = Properties.Resources.CustomIcon1; _errorProvider1.BlinkStyle = ErrorBlinkStyle.NeverBlink; _errorProvider1.IconAlignment = ErrorIconAlignment.MiddleRight; _errorProvider1.IconPadding = 0; _errorProvider2.Icon = Properties.Resources.CustomIcon2; _errorProvider2.BlinkStyle = ErrorBlinkStyle.NeverBlink; _errorProvider2.IconAlignment = ErrorIconAlignment.MiddleRight; _errorProvider2.IconPadding = 20; // 数值根据你图标的宽度调整,16px图标设20足够错开
要是想让图标分别在控件的左右两侧,也可以把其中一个的对齐方式改成左侧:
_errorProvider2.IconAlignment = ErrorIconAlignment.MiddleLeft; _errorProvider2.IconPadding = 0;
方案2:只用一个ErrorProvider(如果不需要同时显示多个图标)
要是你的场景不需要在同一个控件上同时摆多个错误图标,那完全没必要搞多个ErrorProvider,复用一个就好,通过切换图标和错误信息来搞定:
private void ValidateAll() { _errorProvider1.Clear(); // 先清空所有错误标记 // 控件1验证逻辑 if (!IsControl1Valid()) { _errorProvider1.Icon = Properties.Resources.CustomIcon1; _errorProvider1.SetError(_control1, "控件1验证不通过"); } // 控件2验证逻辑 if (!IsControl2Valid()) { _errorProvider1.Icon = Properties.Resources.CustomIcon2; _errorProvider1.SetError(_control2, "控件2验证不通过"); } }
最后再检查个小细节
你得确认下代码里有没有不小心给同一个控件同时设置了多个ErrorProvider的错误,比如既调用了_errorProvider1.SetError(_control1, "...")又调用了_errorProvider2.SetError(_control1, "..."),这肯定会让两个图标叠在一块儿的。
内容的提问来源于stack exchange,提问作者blaz11
相关产品推荐
相关产品推荐

