轉帖|其它|編輯:郝浩|2010-12-13 16:08:15.000|閱讀 3458 次
概述:應用軟件是否好用就體現在一些細節操作上,開發人員是否考慮到了很多細節,例如一個樹形結構的數據若不支持拖拽功能那用起來會很糟糕一些,用戶體驗也會不太爽,下面就以通用權限管理系統組件源碼中的組織機構(部門)管理模塊為例子,講解一下樹型結構TreeView節點拖拽的簡單功能實現。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
應用軟件是否好用就體現在一些細節操作上,開發人員是否考慮到了很多細節,例如一個樹形結構的數據若不支持拖拽功能那用起來會很糟糕一些,用戶體驗也會不太爽,下面就以通用權限管理系統組件源碼中的組織機構(部門)管理模塊為例子,講解一下樹型結構TreeView節點拖拽的簡單功能實現。
其實組織機構管理模塊平時不怎么用到拖拽功能,但是往往在數據初始化時為了實現快速輸入數據及進行整理調整數據時,往往就非常迫切需要一個靈活的組織機構管理器,當每到年底或者公司進行大的人事調整時也會遇到后臺管理員迫切需要拖拽功能的需求,平時組織機構不會有大變動。
軟件功能是否好用,往往是體現在最需要折騰數據時是否好用?養兵千日用兵一時,一般沒經過磨難的新開發的軟件往往會想得不夠周到,關鍵時刻容易掉鏈子,經不起客戶的折騰。
例子程序運行效果如何下:
當然在節點拖拽時,需要注意幾個事情:
1:拖拽時總需要有提示信息比較好,防止誤操作后找不到被托摘到哪里去了。
2:父親節點總不能拖拽到自己的子節點上,那不是死循環或者亂了輩份了不是?
為了讓TreeView支持拖拽功能,需要注意以下幾個屬性設置及相應的事件代碼。
代碼實現參考如下:
private void tvOrganize_ItemDrag(object sender, ItemDragEventArgs e)
{
if (this.permissionEdit)
{
// 開始進行拖放操作,并將拖放的效果設置成移動。
this.DoDragDrop(e.Item, DragDropEffects.Move);
}
}
private void tvOrganize_DragEnter(object sender, DragEventArgs e)
{
// 拖動效果設成移動
e.Effect = DragDropEffects.Move;
}
private void tvOrganize_DragDrop(object sender, DragEventArgs e)
{
// 定義一個中間變量
TreeNode treeNode;
//判斷拖動的是否為TreeNode類型,不是的話不予處理
if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
{
// 拖放的目標節點
TreeNode targetTreeNode;
// 獲取當前光標所處的坐標
// 定義一個位置點的變量,保存當前光標所處的坐標點
Point point = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
// 根據坐標點取得處于坐標點位置的節點
targetTreeNode = ((TreeView)sender).GetNodeAt(point);
// 獲取被拖動的節點
treeNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
// 判斷拖動的節點與目標節點是否是同一個,同一個不予處理
if (BaseInterfaceLogic.TreeNodeCanMoveTo(treeNode, targetTreeNode))
{
if (BaseSystemInfo.ShowInformation)
{
// 是否移動部門
if (MessageBox.Show(AppMessage.Format(AppMessage.MSG0038, treeNode.Text, targetTreeNode.Text), AppMessage.MSG0000, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
return;
}
}
ServiceManager.Instance.OrganizeService.MoveTo(UserInfo, treeNode.Tag.ToString(), targetTreeNode.Tag.ToString());
// 往目標節點中加入被拖動節點的一份克隆
targetTreeNode.Nodes.Add((TreeNode)treeNode.Clone());
// 將被拖動的節點移除
treeNode.Remove();
}
}
}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載