winform窗体自身的validating事件何时触发?

cykevin 2010-03-09 03:25:50
我已经设了窗体的causevalidate属性为true,但是无论怎样,这个事件好像都不会被触发,为什么啊?
...全文
1162 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cykevin 2010-03-19
  • 打赏
  • 举报
回复
没有满意答案,结贴。
cykevin 2010-03-11
  • 打赏
  • 举报
回复

回复内容太短了!
cykevin 2010-03-10
  • 打赏
  • 举报
回复
换个方式肯定是没问题的,关键是这个窗体的validate为啥不触发?
xingyuebuyu 2010-03-10
  • 打赏
  • 举报
回复
你换个思路吧,在界面上隐藏一个TextBox,然后触发TextBox的Validating 事件,在里面进行验证就可以了。在按钮里用下面的方法触发TextBox的Validating 事件
this.ValidateChildren(System.Windows.Forms.ValidationConstraints.None);
cykevin 2010-03-10
  • 打赏
  • 举报
回复
button1_click(object sender,EventArges e)
{
if(this.validate())//在这里调用。
{
this.DialogResult=DialogResult.OK;
}
}
jin20000 2010-03-10
  • 打赏
  • 举报
回复
引用 9 楼 cykevin 的回复:
引用 8 楼 lzsh0622 的回复:
C# code// 模式窗口中,去掉OK键设置,用代码退出privatevoid button1_Click(object sender, EventArgs e)
{if (验证通过)
{this.DialogResult= DialogResult.OK;this.Close();
}else
{
MessageBox.Show("XXXXX 错误,请修?-
验证通过这里,我用this.Validate(). 窗体的login_Validating事件也写了代码,但是代码运行不到里面去。

this.validate() 你是在哪调用的?
jin20000 2010-03-10
  • 打赏
  • 举报
回复
引用 5 楼 zcl24 的回复:
当通过使用键盘(Tab、Shift+Tab 等)、通过调用 Select  或 SelectNextControl  方法或者通过将 ContainerControl..::.ActiveControl 属性设置为当前窗体等方式更改焦点时,焦点事件按以下顺序发生:

  1.

      Enter
  2.

      GotFocus
  3.

      Leave
  4.

      Validating
  5.

      Validated
  6.

      LostFocus

当通过使用鼠标或调用 Focus 方法的方式更改焦点时,焦点事件按以下顺序发生:

  1.

      Enter
  2.

      GotFocus
  3.

      LostFocus
  4.

      Leave
  5.

      Validating
  6.

      Validated

如果 CausesValidation 属性设置为 false,则将取消 Validating 和 Validated 事件。

如果在 Validating 事件委托中,CancelEventArgs 的 Cancel 属性设置为 true,则正常情况下将在 Validating 事件之后发生的所有事件均被取消。

有关处理事件的更多信息,请参见使用事件。

Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 平台说明:

Validating 事件将在 .NET Compact Framework 上所有代码顺序中的 LostFocus 之后激发,以后无法还原焦点的情况除外(例如,关闭窗体时)

不错,还真没观察这么仔细,晚上回去试试
beibeisay88 2010-03-10
  • 打赏
  • 举报
回复
我是来接分的~~~~~~~~~~~~~~~~~~~~~~·····
cykevin 2010-03-10
  • 打赏
  • 举报
回复
引用 8 楼 lzsh0622 的回复:
C# code// 模式窗口中,去掉OK键设置,用代码退出privatevoid button1_Click(object sender, EventArgs e)
{if (验证通过)
{this.DialogResult= DialogResult.OK;this.Close();
}else
{
MessageBox.Show("XXXXX 错误,请修?-

验证通过这里,我用this.Validate(). 窗体的login_Validating事件也写了代码,但是代码运行不到里面去。
lzsh0622 2010-03-09
  • 打赏
  • 举报
回复


// 模式窗口中,去掉OK键设置,用代码退出
private void button1_Click(object sender, EventArgs e)
{
if (验证通过)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
else
{
MessageBox.Show("XXXXX 错误,请修改...");
}
}
cykevin 2010-03-09
  • 打赏
  • 举报
回复
各位所说的我都看了,但是仍然解决不了我目前的问题,我的情况是这样的:
一个登录窗口以模式窗口弹出,其上有个IP地址控件,我想将这个DialogResult设为Ok之前验证一下这个IP地址,如果验证不通过就取消。但是问题是代码总是走不到窗体的validating事件处理程序里面去。
我想看来是我对这个窗体验证机制理解错了,请高手解惑。
jerryfos 2010-03-09
  • 打赏
  • 举报
回复
如果控件的CausesValidation 属性设置为true后,那么这个控件的焦点转移到另一个控件上时(并且它的CausesValidation也为true)时才会触发Validating 事件
zcl24 2010-03-09
  • 打赏
  • 举报
回复
当通过使用键盘(Tab、Shift+Tab 等)、通过调用 Select 或 SelectNextControl 方法或者通过将 ContainerControl..::.ActiveControl 属性设置为当前窗体等方式更改焦点时,焦点事件按以下顺序发生:

1.

Enter
2.

GotFocus
3.

Leave
4.

Validating
5.

Validated
6.

LostFocus

当通过使用鼠标或调用 Focus 方法的方式更改焦点时,焦点事件按以下顺序发生:

1.

Enter
2.

GotFocus
3.

LostFocus
4.

Leave
5.

Validating
6.

Validated

如果 CausesValidation 属性设置为 false,则将取消 Validating 和 Validated 事件。

如果在 Validating 事件委托中,CancelEventArgs 的 Cancel 属性设置为 true,则正常情况下将在 Validating 事件之后发生的所有事件均被取消。

有关处理事件的更多信息,请参见使用事件。

Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows CE 平台说明:

Validating 事件将在 .NET Compact Framework 上所有代码顺序中的 LostFocus 之后激发,以后无法还原焦点的情况除外(例如,关闭窗体时)
phommy 2010-03-09
  • 打赏
  • 举报
回复
1.手动调用Validate方法时触发
2.验证父控件时被触发
zcl24 2010-03-09
  • 打赏
  • 举报
回复
事件要注册。
可以在构造函数中写或
在属性-》事件-》(双击产生)validating事件
fanana 2010-03-09
  • 打赏
  • 举报
回复
不懂,帮顶,期待答案
healer_kx 2010-03-09
  • 打赏
  • 举报
回复
关注一下,一直没有看这块。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧