void _lnkCon_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Escape) { this.__timerDropList.Stop(); this.Visible = false; } else if (e.KeyCode == Keys.Enter || e.KeyCode == (Keys.LButton | Keys.MButton | Keys.Back)) { _gridCellClick(this.__dropGridView); } else if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down) { __dropGridView.Focus(); } }
void InitTextDropGrid <T, R, P>(UcDataGridView gridView, Control lnkCon , List <DropGridCol> colList, P param, Func <P, T> action) { #region 定位表格 int x = 0, y = 0; Control curCon = lnkCon; while (!curCon.GetType().Name.ToStringHasNull().StartsWith("frm")) { x += curCon.Left; y += curCon.Top; curCon = curCon.Parent; } y += lnkCon.Height; if (x + gridView.Width > this.FindForm().ClientSize.Width) { x = (x - gridView.Width) + lnkCon.Width < 0 ? 0 : (x - gridView.Width) + lnkCon.Width; } if (y + gridView.Height > this.FindForm().ClientSize.Height) { y = y - lnkCon.Height - gridView.Height < 0 ? 0 : y - lnkCon.Height - gridView.Height; } this.Left = x; this.Top = y; this.BringToFront(); #endregion #region 设置控件的KeyUp事件 if (!__lstAddDropGridControl.Exists(a => a == lnkCon.Name)) { __lstAddDropGridControl.Add(lnkCon.Name); lnkCon.KeyDown += delegate(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { this.__timerDropList.Stop(); this.Visible = false; } else if (e.KeyCode == Keys.Enter) { _gridCellClick(gridView); } else if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down) { gridView.Focus(); } }; } #endregion #region 表格赋加事件 if (gridView.Tag != lnkCon) { gridView.PreviewKeyDown -= _gridView_PreviewKeyDown; gridView.PreviewKeyDown += new PreviewKeyDownEventHandler(_gridView_PreviewKeyDown); gridView.CellClick -= _gridView_CellClick; gridView.CellClick += new DataGridViewCellEventHandler(_gridView_CellClick); } gridView.Tag = lnkCon; if (gridView.Rows.Count > 0) { gridView.Columns[0].Tag = colList; } #endregion if (!this.Visible) { this.Visible = true; } }