C#开发——Winform中ToolTip闪烁的解决方案

15 篇文章 0 订阅
5 篇文章 1 订阅

1、背景

        首先要知道在何种情况下需要用tooltip控件,使用场景应该是:鼠标移入某个控件区域,显示tooltip的提示;移出后隐藏该提示

        采用的比较多的方式是,对该控件的MouseMove和MouseLeave事件进行处理。

        至于为什么不是MouseEnter或者MouseHover,是因为Enter和Hover都是Move触发时间段内起始点和某一特定时间点的一次特定触发。

2、拓展

        处理Move事件可以覆盖更多的场景需要,比如在listview或其他集合控件,在item上移动时,也可以通过判断鼠标相对于控件的位置,通过一些其他方法判断当前移动到了哪个item上,结合item的tag属性,从而可以给各个item显示不同的tooltip内容。

3、闪烁问题+调试定位

        闪烁出现的原因,是因为我们在MouseMove事件中调用ToolTip的Show对其进行显示(其参数配置不再赘述),在MouseLeave事件中调用了ToolTip的Hide将其隐藏。

 

        而实际上鼠标是有可能在某个范围内小幅度的漂移,导致的结果就是看上去鼠标未移动,而实际上,在某些特定位置,Move和Leave事件会不断的接连触发(如上加入断点输出自定义内容),导致隐藏、显示、隐藏、显示... ...

4、解决方案

        实际上界面类似视觉效果异常的处理,要考虑一个词“障眼法”,用户是不需要考虑你的后台代码如何运行的。

        可以参考以下代码,限制Leave事件的触发而主动隐藏tooltip的频率(根据实际情况设置tooltip的3个一般参数,设置timespan的时间段大小):

 5、其他界面刷新卡顿“”问题

        好的障眼法,能够处理很多的界面开发问题。其他的知识是,人眼能够识别变化的频率是只能看到30Hz以下的,所以另外的类似在MouseMove事件中处理其他“界面刷新卡顿”问题时,可以考虑通过类似的记录时间判断两次处理时间的差值(30ms=1s/30Hz处理一次),让其慢下来,对用户来说是无感的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 C# WinForm 实现修改密码功能,可以按照以下步骤进行: 1. 在 WinForm 添加两个文本框和一个按钮,一个文本框是用于输入旧密码,另一个文本框是用于输入新密码,按钮是用于提交修改密码的操作。 2. 在按钮的 Click 事件,编写代码实现密码修改的逻辑。首先,可以将用户输入的旧密码和新密码保存到字符串变量,然后可以使用一些条件语句对密码进行验证,例如,旧密码是否正确,新密码是否符合要求等等。如果密码验证通过,可以调用相应的方法将新密码保存到数据库。 下面是一个简单的密码修改示例代码: ```csharp private void btnChangePassword_Click(object sender, EventArgs e) { string oldPassword = txtOldPassword.Text.Trim(); string newPassword = txtNewPassword.Text.Trim(); // 验证旧密码是否正确 if (!ValidateOldPassword(oldPassword)) { MessageBox.Show("旧密码不正确!", "提示"); return; } // 验证新密码是否符合要求 if (!ValidateNewPassword(newPassword)) { MessageBox.Show("新密码不符合要求!", "提示"); return; } // 将新密码保存到数据库 if (!SaveNewPassword(newPassword)) { MessageBox.Show("密码修改失败!", "提示"); return; } MessageBox.Show("密码修改成功!", "提示"); } private bool ValidateOldPassword(string password) { // TODO: 根据需要实现旧密码验证逻辑 return true; } private bool ValidateNewPassword(string password) { // TODO: 根据需要实现新密码验证逻辑 return true; } private bool SaveNewPassword(string password) { // TODO: 根据需要实现保存新密码到数据库的逻辑 return true; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值