解决 我的用户验证不是'不能按预期工作

ii

新成员
已加入
2019年6月8日
留言内容
1
编程经验
1-3
基本上,我正在尝试创建一个用于记录数据的软件,但是我无法弄清整个登录部分,我将在下面放置一段代码,如果您可以帮助我甚至给我提供更好的解决方案,我将不胜感激。创建它时,我没有发现任何问题,我认为这是“文本”框的一个问题,即它不收集文本,因此无法验证文本。我不确定如何解决此问题,尽管我认为这是非常基本的,所以我认为其他人可以帮助我。谢谢,我对使用C#编程还很陌生,虽然现在我正在学习此语言,但是我已经使用了更多的基本语言,通常我会创建手机游戏,这是我的第一个Forms项目,因此我很不理解它。
完美的PNG
(这是一个Windows窗体项目,我没有看到"Windows forms"此部分下面的部分)
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
首先,租约不要发布代码图像。代码是文本,因此将其发布为文本,然后使用提供的编辑器将其格式化为代码,以提高可读性。然后,我们可以复制并粘贴代码以运行它或自己对其进行编辑。如果您发布图像,则我们必须将其全部键入,这很浪费我们的时间。

As for the issue, that is a weird way to do things but it still looks like it should work. 什么's the point of the TextChanged handlers at all? Why can't you just check the final value from each TextBox when the Button is clicked?

就像我说的那样,看起来它应该仍然可以工作。第一个问题是前两个方法是否实际上在处理它们似乎是的事件。您是如何创建它们的?您是否在它们上设置了断点以确认它们确实已执行?如果没有,请这样做。如果是这样,他们受到打击了吗?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
我认为文本更改事件不是设置用户名Password bools的适当方法(假设它们是bool)。

每次用户键入一个字符,该事件将触发每个按下的输入键的检查。我认为您最好对每个控件使用失去焦点的事件。您也可以在鼠标离开控件时设置焦点丢失。

鉴于您有一个需要单击的按钮,这使我的方法更好,因为单击按钮时,这将使焦点集中在一个新控件上,从而使丢失焦点事件(如果它们实际上是焦点在控件上)会触发,这使我的方法比您正在使用什么。

从移动设备发送的回复
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
我认为文本更改事件不是设置用户名Password bools的适当方法(假设它们是bool)。

每次用户键入一个字符,该事件将触发每个按下的输入键的检查。我认为您最好对每个控件使用失去焦点的事件。您也可以在鼠标离开控件时设置焦点丢失。
If you want to do something when a control loses focus then you should handle the 离开 event, not the 失落的焦点 event. If you want to prevent a control losing focus based on its content then you should handle the 证实 event.
鉴于您有一个需要单击的按钮,这使我的方法更好,因为单击按钮时,这将使焦点集中在一个新控件上,从而使丢失焦点事件(如果它们实际上是焦点在控件上)会触发,这使我的方法比您正在使用什么。
If you're going to click the Button, I would think that doing the checking then would make more sense. The only reason I can think to do otherwise is if you want the Button to remain disabled until valid data is entered. In that case, TextChanged would be more appropriate than 离开, because you couldn't click a disabled Button to raise the event. That is not what's happening here though. In the vast majority of cases, testing a user name and password will be done against a database when the user clicks a Button, so that's really how it ought to be done here too. This is a contrived scenario but at least it should simulate a real scenario as closely as possible.
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,925
地点
英国
编程经验
10+
可以以用户希望使用它们的任何一种或任何方式使用事件。他们如何决定实施此逻辑是完全偏爱的。这两个事件都可以设置值。

尽管有任何目的要根据msdn docs使用任何事件,但只要逻辑能够执行所需的操作,并且不干扰预期事件的自然流或使用,这无关紧要。利用。

由于大多数人不使用这些事件,因此适合以这种方式使用。您可能不同意,但这是您的意见。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
由于大多数人不使用这些事件,因此适合以这种方式使用。您可能不同意,但这是您的意见。
It's Microsoft's opinion and they are the ones who wrote the code and intended it to work a particular way. I know for a fact that there are times that the 重点 and 失落的焦点 events do not work as expected while the Enetr and 离开 events do. Do you know what those times are? If you just use the right events then you don't have to. People are free to do the wrong thing if they wish. To recommend they do the wrong thing when you know better is irresponsible.
 
已加入
2011年4月23日
留言内容
177
地点
密歇根州兰辛;美国
编程经验
10+
诚实地设置Username布尔值和Password布尔值听起来更像是一种验证,这使我倾向于使用Validating / 已验证事件。
但是考虑到此代码似乎是登录过程的一部分,我实际上不建议在任何一个TextBox上使用任何事件,而是直接在Button的click事件中检查值(完全摆脱这两个布尔变量)。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
触摸前屏幕用户界面,例如早在90年代,甚至笔输入就很少见时,Microsoft的意图就是使用Win32 API的获得焦点和失去焦点消息。没有进入和离开的提示,鼠标悬停在工具提示上仍然是新颖的。当Avalon团队在他们的框架上工作时,他们最初试图与Win32 API离婚,他们期待着将来的UI范例(如触摸和笔输入),因此它们具有enter和离开事件。后来,随着它们被吸收和/或转换为.NET Framework的核心,这两个事件系统被合理化,尤其是因为WinForms最初是作为Win32 API的简单包装而来的。

所以现在 文件资料 现在告诉我们根据使用键盘还是鼠标(或等效于鼠标的触摸)而期望事件发生的顺序:
当您使用键盘(TAB,SHIFT + TAB等)更改焦点时,通过调用 选择 要么 选择下一个控件 方法,或通过设置 ContainerControl.ActiveControl 属性为当前表单时,焦点事件按以下顺序发生:

  1. 输入
  2. 重点
  3. 离开
  4. 证实
  5. 已验证
  6. 失落的焦点
当您通过使用鼠标或通过调用 焦点 方法,焦点事件按以下顺序发生:

  1. 输入
  2. 重点
  3. 失落的焦点
  4. 离开
  5. 证实
  6. 已验证
 
Last edited:
已加入
2011年4月23日
留言内容
177
地点
密歇根州兰辛;美国
编程经验
10+
我记得在.Net 1.0和1.1中没有Enter&离开事件时,只有缺陷的GotFocus和LostFocus是我们必须处理的事情。
我记得.Net 2.0何时发布以及可以正常运行的Enter&保留添加的事件,它们当然永远不会因为兼容性原因而丢弃GotFocus和LostFocus事件,但这只是我的猜测。
 
最佳 底部