SUPER_CRJ 发表于 2020-5-30 16:21:53

求助:C#编写的密码显示与不显示反应慢

最近在写一个C#的电脑软件。
其中一行是输入密码的,后面跟着一个“眼睛’”:就是类似手机上填写密码的时候,按下眼睛可以显示密码,再按一下不显示密码。

用的方法是:
用两个图片:一个睁眼的图片,一个闭眼的图片,然后:点击的时候,来回切换。

实际中:就是感觉反应比较慢,手机上的一直点都没事,但是我自己写的:感觉0.8S左右才切换过来。
请教:就是什么原因,另外:求教好方法!!



代码如下:
private void pic_hidden0_Click(object sender, EventArgs e)
      {
            PictureBox pic = (PictureBox)sender;
            int txbTag = int.Parse(pic.Tag.ToString());
            foreach (Control ctl in this.gb_encrypt.Controls)
            {
                if ((ctl as GroupBox) != null)
                {
                  foreach (Control c in ctl.Controls)
                  {
                        if ((c as TextBox) != null)
                        {
                            TextBox txb = c as TextBox;
                            if (int.Parse(txb.Tag.ToString()) == txbTag)
                            {
                              if (txb.PasswordChar != '*')
                              {
                                    txb.PasswordChar = '*';
                                    pic.Image = USB_LIN.Properties.Resources.eyeHidden;
                              }
                              else
                              {
                                    txb.PasswordChar = '\0';
                                    pic.Image = USB_LIN.Properties.Resources.eyeShow;
                              }
                            }
                        }
                  }
                }
            }
      }

Himem 发表于 2020-5-30 16:33:41

本帖最后由 Himem 于 2020-5-30 19:43 编辑

同样位置放两个PictureBox叠在一起,Image分别是眼睛的两张图,
靠改Visible属性来切换显示试试

eiglxl 发表于 2020-5-30 16:39:32

现在WIN10下装VS哪个版本好用点?

深圳嘉立创-SMT 发表于 2020-5-30 17:14:03

两个foreach 迭代完了才转让控制权给系统, 这时才刷界面.

SUPER_CRJ 发表于 2020-5-30 17:19:08

深圳嘉立创-SMT 发表于 2020-5-30 17:14
两个foreach 迭代完了才转让控制权给系统, 这时才刷界面.

总共有3个需要切换,那怎样写才比较好呢,现在用的foreach,代码相对少点,而且里面控件也不多。

markdif 发表于 2020-5-30 17:24:35

把切换图片这个动作放在另外一个新线程里试试??

深圳嘉立创-SMT 发表于 2020-5-30 18:08:00

SUPER_CRJ 发表于 2020-5-30 17:19
总共有3个需要切换,那怎样写才比较好呢,现在用的foreach,代码相对少点,而且里面控件也不多。 ...

没看懂这两个嵌套迭代是干嘛的.我也不知道怎么改.

hy317 发表于 2020-5-30 18:40:02

            if(密码可见)
                textBoxPSW.PasswordChar = '\0';
            else
                textBoxPSW.PasswordChar = '*';
好像只要这样就可以了吧

智涅 发表于 2020-5-30 19:30:29

试下先把两句 pic.Image=xxx; 改成某label.text=xx;看会不会也是有延时,如果有的话是你上面判断执行时间长的问题,如果没有则就是更换图片的时延问题。图片更换延时,1是可能界面太复杂刷新的时间太长,2会不会你硬盘有点老,读取图片资源会比较慢?试下先把图片load进缓存

SUPER_CRJ 发表于 2020-5-30 21:52:35

智涅 发表于 2020-5-30 19:30
试下先把两句 pic.Image=xxx; 改成某label.text=xx;看会不会也是有延时,如果有的话是你上面判断执行时间长 ...

最后测试发现是这样的:
图片用的pictureBox,然后用的click事件进行处理的,最后发现是:click事件太慢造成的。 (最后换成button就很快!)
请教:为什么pictureBox的click慢,而button的click比较快?

SUPER_CRJ 发表于 2020-5-30 22:01:43

深圳嘉立创-SMT 发表于 2020-5-30 18:08
没看懂这两个嵌套迭代是干嘛的.我也不知道怎么改.

最后测试发现是这样的:
图片用的pictureBox,然后用的click事件进行处理的,最后发现是:click事件太慢造成的。 (最后换成button就很快!)
请教:为什么pictureBox的click慢,而button的click比较快?

fszhang 发表于 2020-5-30 22:33:08

试试MouseDown事件,函数里面判断一下左键

armstrong 发表于 2020-5-30 22:33:16

本帖最后由 armstrong 于 2020-5-30 22:34 编辑

你是不是指picturebox快速连按时候反应慢?我发现click事件其实很及时,如果你按的间隔不要太快的话。
按钮是不接受双击的,所以快速连按都很快;而picturebox会把你快速连按识别为双击事件。
你看看:

SUPER_CRJ 发表于 2020-5-30 22:37:32

fszhang 发表于 2020-5-30 22:33
试试MouseDown事件,函数里面判断一下左键

MouseDown其实刚刚也试过了,一样的慢。

foxpro2005 发表于 2020-5-30 23:40:13

本帖最后由 foxpro2005 于 2020-5-30 23:47 编辑

SUPER_CRJ 发表于 2020-5-30 22:37
MouseDown其实刚刚也试过了,一样的慢。

你这里应该是用Button类控件(或Label也可以),而不是用Pic,想想Pic的本质是什么

SUPER_CRJ 发表于 2020-5-31 11:03:03

foxpro2005 发表于 2020-5-30 23:40
你这里应该是用Button类控件(或Label也可以),而不是用Pic,想想Pic的本质是什么

...

pic的本质是什么?C#全靠自学,没有系统培训过!

SUPER_CRJ 发表于 2020-5-31 11:04:00

armstrong 发表于 2020-5-30 22:33
你是不是指picturebox快速连按时候反应慢?我发现click事件其实很及时,如果你按的间隔不要太快的话。
按钮 ...

说的有道理,我怎么没想到?那么如何屏蔽:pictureBox的双击事件呢?

SUPER_CRJ 发表于 2020-5-31 11:08:49

armstrong 发表于 2020-5-30 22:33
你是不是指picturebox快速连按时候反应慢?我发现click事件其实很及时,如果你按的间隔不要太快的话。
按钮 ...

经过测试,确实是因为双击事件造成的!
最后:把click和doubleClick都写进同一个事件,就变得相当快了!

yuyu87 发表于 2020-6-1 08:22:23

两个图片资源申明为窗体级public变量,提前加载,否则从资源中动态加载有些慢
页: [1]
查看完整版本: 求助:C#编写的密码显示与不显示反应慢