DEV中右鍵菜單如何只在非空單元格上顯示?
阿新 • • 發佈:2018-10-31
cursor update equal 單元格 空白區域 ram mouseup text date
問題:
1. 開發時,我的winform程序中有很多gridview,我希望右鍵菜單只在我點擊非空的行時才顯示,點擊其他空白區域時不顯示;
2. 有一個樹狀導航圖,treelist 中的節點都有右鍵菜單,我希望只在我點擊這個節點時才顯示右鍵菜單,點擊treelist的空白位置不顯示右鍵菜單。
實現:
1.
#region 右鍵菜單 private void gvSlurry_MouseUp(object sender, MouseEventArgs e) { GridHitInfo _gridHI = gvSlurry.CalcHitInfo(newPoint(e.X, e.Y)); if (e.Button == MouseButtons.Right && _gridHI.RowHandle > 0)//根據當前選中的行數非空來確定右鍵菜單顯示。 { menuRow.Show(MousePosition); } } #endregion /// <summary> /// 右鍵菜單選項彈出條件 /// </summary> ///<param name="sender"></param> /// <param name="e"></param> private void gvSlurry_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) { int _select = gvSlurry.SelectedRowsCount; menuUpdate.Enabled = false; menuDelete.Enabled= false; if (_select == 1) { menuUpdate.Enabled = true; menuDelete.Enabled = true; } else if (_select > 1) { menuDelete.Enabled = true; } }
需要註意的是:
這裏的右鍵菜單使用的是ContextMenuStrip控件;
GridControl下的ContextMenuStrip不綁定控件ContextMenuStrip1;
這裏用到了GridView的兩個事件,一個是MouseUp事件,一個是PopupMenuShowing事件。第二個事件是用來在菜單顯示之前對菜單的現實條件做一些限制,比如說我這裏的選中一條記錄是右鍵刪除和更新都可用,選中多條記錄時右鍵只有刪除可用。
2.
private void treeList1_MouseUp(object sender, MouseEventArgs e) { TreeList _tree = sender as TreeList; if (Equals(e.Button, MouseButtons.Right) && Equals(ModifierKeys, Keys.None) && Equals(treeList1.State, TreeListState.Regular)) { Point _point = new Point(Cursor.Position.X, Cursor.Position.Y); TreeListHitInfo _hitInfo = _tree.CalcHitInfo(e.Location); if (_hitInfo.HitInfoType == HitInfoType.Cell) { _tree.SetFocusedNode(_hitInfo.Node); } else { return; } if (_tree.FocusedNode.HasChildren) { popupMenu1.ShowPopup(_point); } else { popupMenu2.ShowPopup(_point); } } }
DEV中右鍵菜單如何只在非空單元格上顯示?