DataGridView
DataGridView上按右鍵彈出右鍵菜單前選中當前行
private void DataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)

{
DataGridView1.ClearSelection();
DataGridView1.Rows[e.RowIndex].Selected = true;
DataGridView1.CurrentCell = DataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
}


/**//*
2007-05-16 17:31 by HELLO [未注冊用戶]
用“dataGridView1_CellMouseClick”這個事件

有些時候可以只彈出菜單,沒有選擇單元格;有時候只選擇單元格,沒有彈出菜單

如果菜單控件在綁在DATAGRIDVIEW上(dataGridView1.ContextMenuStrip = this.ContextSrtip1),又不能選擇單元格
*/
DataGridView 超鏈接點擊事件
//內容點擊, 并判斷所點擊的列名
private void dgvData_CellContentClick(object sender, DataGridViewCellEventArgs e)

{
DataGridView dgv = sender as DataGridView;
string columnName = dgv.Columns[e.ColumnIndex].Name;
if ("operation".Equals(columnName))

{//如果點擊的列名符合
dgv.Rows.RemoveAt(e.RowIndex);
}
}
TreeView
c# winform TreeView控件中實現拖拽的功能

節點拖拽事件#region 節點拖拽事件
//當用戶開始拖動節點時
private void tvModel_ItemDrag(object sender, ItemDragEventArgs e)

{
TreeNode selectNode = e.Item as TreeNode;
this.tvModel.SelectedNode = selectNode;

this.form.DoDragDrop(e.Item, DragDropEffects.Move);
}

//將對象拖入控件的邊界時
private void tvModel_DragEnter(object sender, DragEventArgs e)

{
TreeNode enterNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
if (enterNode != null)
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}

//在完成拖放操作時
private void tvModel_DragDrop(object sender, DragEventArgs e)

{
TreeNode selectNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));

//0.如果選擇源為空 或者不是二級節點則退出
if (selectNode == null || selectNode.Level != 1)
return;

//1.根據鼠標坐標獲得目標節點
Position.X = e.X;
Position.Y = e.Y;
Position = this.tvModel.PointToClient(Position);
TreeNode targetNode = this.tvModel.GetNodeAt(Position);
foreach (TreeNode node in this.tvModel.Nodes[0].Nodes)
node.NodeFont = new Font(this.form.Font, FontStyle.Regular);

//2.獲得要插入的目標節點索引
int index = 0;
if (targetNode == null)
index = selectNode.Parent.Nodes.Count - 1; //目標節點為null, 直接插入到最后
else if (targetNode.Level == 1)
index = targetNode.Index + 1; //目標節點為同級, 直接在之后插入
else if (targetNode.Level == 0)
index = 0; //目標為根節點, 直接插入到最前
else if (targetNode.Level > 1)

{ //目標節點為二級節點以后, 遍歷到其二級節點
while (targetNode.Level > 1)
targetNode = targetNode.Parent;
index = index = targetNode.Index + 1;
}

//3.源節點刪除, 目標節點在索引出插入, 并高亮選中
selectNode.Remove();
this.tvModel.Nodes[0].Nodes.Insert(index, selectNode);
this.tvModel.SelectedNode = selectNode;
}

//將對象拖過控件邊緣時
private void tvModel_DragOver(object sender, DragEventArgs e)

{
Position.X = e.X;
Position.Y = e.Y;
Position = this.tvModel.PointToClient(Position);

//在拖過的控件前后顯示劃線效果
TreeNode targetNode = this.tvModel.GetNodeAt(Position);
if (targetNode != null && targetNode.Level == 1)

{
if (targetNode.PrevNode != null)
targetNode.PrevNode.NodeFont = new Font(this.form.Font, FontStyle.Regular);
if (targetNode.NextNode != null)
targetNode.NextNode.NodeFont = new Font(this.form.Font, FontStyle.Regular);
targetNode.NodeFont = new Font(this.form.Font, FontStyle.Underline);
}
}
#endregion
posted on 2009-07-10 12:21
黃小二 閱讀(648)
評論(0) 編輯 收藏 所屬分類:
C#