您现在的位置: 爱51代码网 >> 范文 >> 文章正文
ComboBox手动设置焦点调用窗体Validate事件不能下拉

数据新增窗体,有一个字段用到了ComboBox(cboFileDate)控件,此字段为必填,验证用到了Validating事件和ErrorProvider(epErrInfo)控件。

考虑到如果用户不进入ComboBox焦点,直接点击保存按钮,也需要对ComboBox进行验证。实现代码如下:

 private void cboPhaseID_Validating(object sender, CancelEventArgs e)         {             if (this.cboPhaseID.SelectedIndex == -1)             {                 e.Cancel = true;                 this.epErrInfo.SetError(this.cboPhaseID, "请选择一项!");             }             else            {                 this.epErrInfo.SetError(this.cboPhaseID, "");             }         }

 private void btnSave_Click(object sender, EventArgs e)         {             List<Control> list = new List<Control>();  //需要验证的控件集合             list.Add(cboPhaseID);             //......             foreach (var item in list)             {                 item.Focus();                 if (!this.Validate())                 {                     return;                 }             }            //TO DO  保存数据到数据库         }


出现的异常:用户不进入ComboBox焦点,直接点击保存按钮后。点击cboFileDate,下拉项可以正常下拉,鼠标释放后,下拉项会自动收起,导致不能对cboFileDate绑定的值进行选取。

另外发现,此异常下在cboFileDate控件上按住鼠标左键拖拽可以选取...
private void cboPhaseID_Validating(object sender, CancelEventArgs e) CS方式没必要用到这种方法

直接在你的按下的按钮事件中加入 就可以了

if (this.cboPhaseID.SelectedIndex == -1)
            {
            
                this.epErrInfo.SetError(this.cboPhaseID, "请选择一项!");
            }
            else
            {
                this.epErrInfo.SetError(this.cboPhaseID, "");
            }
最终的解决方案如下:
所有验证还是写到控件的Validating事件中  去掉了e.Cancel = true;【需要的控件比较多时,考虑后期进一步对Validating事件进行封装,以批量注册Validating事件,传入验证类型,调用通用验证类,窗口关闭时销毁所有Validating事件】

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    TClientDataSet如何避免多人更新
    如何用delphi代码修改XML节点
    vc++ pvoid *用delphi怎么表达
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    如何用delphi代码修改XML节点
    vc++ pvoid *用delphi怎么表达
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    强类型DataSet转成DataTable
    浪微博中@用户的正则表达式
    C#_WinForm文件上传到指定路
    CHARFORMAT结构体为什么要有
    -abort() has been called
    Windows环境下如何编译zxing
    C#如何调用C++写的函数
    问题标签用户C#多态中new 和
    C# 中InlineShapes.AddPictu
    pdf2flash将pdf转为swf时本地
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |