本来时间控件是隐藏的,用户点击了一下, 时间选择控件出现了. 结果此时用户手欠 随手点了下 其他单元格. 

此时当前列就变成了其他单元格的当前单元格. .结果此时再回过来头操作时间控件,会出现 选择了时间控制当前单元格,就成了1步骤的单元格,于是乎出现bug

怎么处理呢? 经过分析,尝试,先尝试控件父窗体,结果父窗体内也只能提供当前列之类的参数.

一连串的测试.

发现时间窗在隐藏的时候每次点击单元格先触发

  private void dgv_CurrentCellChanged(object sender, EventArgs e){} 事件

但当前窗体在选择了其他单元格时,时间窗体还在显示,在点击的时候无法 触发到上边事件,在网页中还有上下层事件传递,这c#winform似乎不行.

因此:只有在点击其他单元格时,隐藏时间选择控件.这样问题就解决了.....

 

 private void dgv_CurrentCellChanged(object sender, EventArgs e)
        {
            if (dgv.CurrentCell == null)
            {
                return;
            }
            DataGridViewColumn column = dgv.CurrentCell.OwningColumn;
            //如果是要显示下拉列表的列的话
            if (column.Name.Equals("日期"))
            {
               int columnIndex = dgv.CurrentCell.ColumnIndex;
                int rowIndex = dgv.CurrentCell.RowIndex;
                Point p = this.dgv.Location;
                Rectangle rect = dgv.GetCellDisplayRectangle(columnIndex, rowIndex, false);
                dgv.Controls.Add(InputDateudp);
                InputDateudp.Location = new System.Drawing.Point(rect.X,rect.Y);            //将下拉列表的当前项 赋值
               InputDateudp.Text = dgv.Rows[rowIndex].Cells[columnIndex].Value.ToString();
              
                InputDateudp.Visible = true;
           
            }else   //因存在选择其他单元格再选择时间时,出现当前单元格存在问题. 在点击其他单元格时必须隐藏时间框和下来选择框
            {
                InputDateudp.Visible = false;             
            }
        }

 开始一直在从显示的时间控件 找当前单元格.找所在单元格.路子走不通.抓抓包换换思路问题就解决了. 感叹编程无常.欲速则不达. 

posted on 2022-07-18 17:06  小石头的一天  阅读(148)  评论(0)    收藏  举报