即使在另一个控件上的验证失败,也允许单击按钮

Nikos C.

我有一个有趣的问题,我不知道该如何解决。我写了一个可以更改密码的表格。该表单还在一个只读的TextBox中显示当前密码(不是出于验证目的;在这种情况下这并不重要。)每个密码TextBox中都有一个按钮,单击该按钮时,会屏蔽或取消屏蔽密码(替换密码)字符和子弹,反之亦然。)这是整个图片:

屏幕截图

请注意,“遮罩/取消遮罩”按钮是如何在文本框中而不是在文本框中的。这些按钮已放置在带有以下内容的文本框中:

var button = new Button();
button.Width = 20;
button.Cursor = Cursors.Default;
button.FlatStyle = FlatStyle.Flat;
button.Image = SystemIcons.Shield.ToBitmap();
button.Dock = DockStyle.Right;
button.CausesValidation = false;
textBox.Controls.Add(button);

最后一个文本框已启用验证。现在的问题是,由于验证事件失败,用户无法单击另一个文本框上的密码取消屏蔽按钮。因此,用户如果不输入新密码就无法看到当前密码。

我需要一种方法来使密码屏蔽/取消屏蔽按钮可单击,即使文本框中的验证失败。我什么都没想 不能将这些按钮移到文本框之外。

取消屏蔽按钮本身以及文本框的父级都CausesValidation设置为false只有文本框本身将其设置为true

这是Visual Studio 2010中的.NET 2.0 C#项目。

Nikos C.

好吧,我找到了一种方法,可以继续使用Validating事件,并且仍然能够单击其他文本框中的按钮。事实证明,即使按钮没有焦点,也会发送Button.MouseUp事件。

因此,解决方案是同时处理MouseUp和Click事件,并根据包含按钮的文本框当前是否具有键盘焦点来执行密码屏蔽/取消屏蔽:

button.MouseUp += (sender, e) =>
{
    if (button.Parent.ContainsFocus || e.Button != MouseButtons.Left
        || !button.ClientRectangle.Contains(e.Location))
    {
        return;
    }
    textBox.UseSystemPasswordChar = !textBox.UseSystemPasswordChar;
};

button.Click += delegate
{
    if (!button.Parent.ContainsFocus) {
        return;
    }
    textBox.UseSystemPasswordChar = !textBox.UseSystemPasswordChar;
};

我们确实要处理这两个事件,因为如果只处理MouseUp,则用键盘单击按钮(Tab键切换到按钮,而Enter或Space键单击它)将不再起作用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将焦点设置在按钮单击上的另一个控件上

来自分类Dev

在另一个控件上显示错误验证

来自分类Dev

如何在另一个项目中引用的用户控件中单击呼叫按钮?

来自分类Dev

在另一个JFrame的按钮单击上放置一个JFrame

来自分类Dev

按钮单击事件未在用户控件中触发,而是在另一个用户控件中动态创建

来自分类Dev

一个按钮可以控制许多用户控件上的另一个按钮

来自分类Dev

无法检查(单击)另一个单选按钮上的单选按钮:Angular Reactive Form

来自分类Dev

单击按钮并关闭另一个按钮

来自分类Dev

单击另一个按钮时按钮消失

来自分类Dev

单击一个工作表上的按钮以获取另一个工作表上的数据

来自分类Dev

使UIScrollView在另一个ViewController的按钮单击上滚动

来自分类Dev

如何在按钮上单击以显示其类的另一个布局(xml)?

来自分类Dev

关闭子窗体,然后单击C#.net中的用户控件中的按钮,打开另一个窗体?

来自分类Dev

单击另一个元素Selenium中的按钮

来自分类Dev

单击按钮如何调用另一个活动?

来自分类Dev

是否可以在另一个用户控件上看到一个用户控件?

来自分类Dev

如何通过单击另一个用户控件中的按钮在用户控件中的文本框中显示一些文本?

来自分类Dev

单击时如何将用户控件置于另一个控件的前面

来自分类Dev

如何从单击另一个文本框时验证失败的文本框释放焦点

来自分类Dev

单击一个按钮以触发另一个按钮的点击事件

来自分类Dev

单击一个按钮然后激活另一个按钮

来自分类Dev

即使在另一个div上单击,也可以在编辑模式下保持内容可编辑

来自分类Dev

即使在另一个div上单击,也可以在编辑模式下保持内容可编辑

来自分类Dev

Android使用共享首选项在另一个按钮上单击保存单选按钮值

来自分类Dev

自动在表单上填充控件,并在另一个表单上添加控件的值

来自分类Dev

两个按钮,一个保持访问,直到单击另一个

来自分类Dev

单击另一个按钮时如何设置可单击的按钮?

来自分类Dev

单击按钮后,另一个按钮不会单击

来自分类Dev

无法单击“继续”按钮。它正在单击另一个按钮

Related 相关文章

  1. 1

    将焦点设置在按钮单击上的另一个控件上

  2. 2

    在另一个控件上显示错误验证

  3. 3

    如何在另一个项目中引用的用户控件中单击呼叫按钮?

  4. 4

    在另一个JFrame的按钮单击上放置一个JFrame

  5. 5

    按钮单击事件未在用户控件中触发,而是在另一个用户控件中动态创建

  6. 6

    一个按钮可以控制许多用户控件上的另一个按钮

  7. 7

    无法检查(单击)另一个单选按钮上的单选按钮:Angular Reactive Form

  8. 8

    单击按钮并关闭另一个按钮

  9. 9

    单击另一个按钮时按钮消失

  10. 10

    单击一个工作表上的按钮以获取另一个工作表上的数据

  11. 11

    使UIScrollView在另一个ViewController的按钮单击上滚动

  12. 12

    如何在按钮上单击以显示其类的另一个布局(xml)?

  13. 13

    关闭子窗体,然后单击C#.net中的用户控件中的按钮,打开另一个窗体?

  14. 14

    单击另一个元素Selenium中的按钮

  15. 15

    单击按钮如何调用另一个活动?

  16. 16

    是否可以在另一个用户控件上看到一个用户控件?

  17. 17

    如何通过单击另一个用户控件中的按钮在用户控件中的文本框中显示一些文本?

  18. 18

    单击时如何将用户控件置于另一个控件的前面

  19. 19

    如何从单击另一个文本框时验证失败的文本框释放焦点

  20. 20

    单击一个按钮以触发另一个按钮的点击事件

  21. 21

    单击一个按钮然后激活另一个按钮

  22. 22

    即使在另一个div上单击,也可以在编辑模式下保持内容可编辑

  23. 23

    即使在另一个div上单击,也可以在编辑模式下保持内容可编辑

  24. 24

    Android使用共享首选项在另一个按钮上单击保存单选按钮值

  25. 25

    自动在表单上填充控件,并在另一个表单上添加控件的值

  26. 26

    两个按钮,一个保持访问,直到单击另一个

  27. 27

    单击另一个按钮时如何设置可单击的按钮?

  28. 28

    单击按钮后,另一个按钮不会单击

  29. 29

    无法单击“继续”按钮。它正在单击另一个按钮

热门标签

归档