技术开发 频道

C#实践生成CHM文件之代码库编辑器

  今天的主要内容是目录窗体的实现及搜索的实现

  目录窗体BookIndexForm

  目录窗体中,有一个ContextMenuSTrip,即右击窗体出现的菜单,里面有几个比较重要的方法

  添加文件夹、添加文章、删除、重命名

  添加文件夹即添加父节点, 选中可以添加文件夹的节点(显然只有根节点和目录节点),然后将新增一个CHMNode,将它Add到父节点的Nodes里面

/// <summary>        
/// 添加文件夹        
/// </summary>        
/// <param name="sender"></param>        
/// <param name="e"></param>        
private void AddFolderToolStripMenuItem_Click(object sender, EventArgs e)
        {            
TreeNode node
= this.tvIndex.SelectedNode;
//选中的节点                        
//查看是否是根节点或是目录节点            CHMNodeList list = this.GetNodeList(node);            
if (list == null || list.Count==0)            
{              
MessageBox.Show(
"请选择根节点或是目录节点");      
         return;        
    }            
//创建新的节点          
CHMNode newNode
= new CHMNode();
newNode.Name
= "新建文件夹";          
newNode.ImageNo
= "0";            
//newNode.Nodes = new CHMNodeList();            
list.Add(newNode);            
System.Windows.Forms.TreeNode node2
= new TreeNode(newNode.Name);            
node2.Tag
= newNode;         
node2.ImageIndex
= 0;            
node2.SelectedImageIndex
= 0;            
node.Nodes.Add(node2);
//将新节点添加到树中            
node.ImageIndex
= 0;           
node.SelectedImageIndex
= 0;            
this.tvIndex.SelectedNode
= node2;      
}

  添加文章即添加 子节点,注意这时添加的节点他的Nodes要设为null,表示他是文章节点,不能再添加其他节点了

/// <summary>        
/// 添加文章        
/// </summary>        
/// <param name="sender"></param>        
/// <param name="e"></param>        
private void AddArticleToolStripMenuItem_Click(object sender, EventArgs e)        {            
TreeNode node
= this.tvIndex.SelectedNode;            CHMNodeList list = this.GetNodeList(node);            
if (list == null)            
{                
MessageBox.Show(
"请选择根节点或是目录节点");
                return;          
}          
EditForm frmEdit
= new EditForm();
frmEdit.ShowDialog(this);            
CHMNode NewNode
= frmEdit.Node;            
if(NewNode==null)            
{          
      return;            
}            
list.Add(NewNode);            
System.Windows.Forms.TreeNode node2
= new TreeNode(NewNode.Name);            
node2.Tag
= NewNode;            
node2.ImageIndex
= 1;            
node2.SelectedImageIndex
= 1;            
node.Nodes.Add(node2);
//将新节点添加到树中          
node.ImageIndex
= 0;            
node.SelectedImageIndex
= 0;            
this.tvIndex.SelectedNode
= node2;                  
}

 

  重命名:右击节点可以编辑节点的Label,

  实现方法如下:

  将TreeView的LabelEdit设为True,然后编写如下代码:

private void ReNameMToolStripMenuItem_Click(object sender, EventArgs e)        
{            
this.tvIndex.SelectedNode.BeginEdit();        
}        
private void tvIndex_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)        
{            
this.tvIndex.SelectedNode.Name
= e.Label;            
TreeNode node
= this.tvIndex.SelectedNode;            
if (node.Tag is CHMDocument)            
{                
((CHMDocument)node.Tag).Title
= e.Label;            
}            
if (node.Tag is CHMNode)
            {                
((CHMNode)node.Tag).Name
= e.Label;            
}        
}

 

  删除节点,即移除,同时还要删除文件 

/// <summary>        
/// 删除节点      
/// </summary>        
/// <param name="sender"></param>        
/// <param name="e"></param>        
private void DeleteDToolStripMenuItem_Click(object sender, EventArgs e)        
{            
System.Windows.Forms.TreeNode node
= this.tvIndex.SelectedNode;
//获取要删除的节点            
if (node == null)            {                MessageBox.Show("请选择一个节点");              
return;            
}
System.Windows.Forms.TreeNode parent
= node.Parent;
//获取该节点的父节点            
if (parent == null)          
{              
MessageBox.Show(
"请选择目录或页面节点");              
return;
           }  
CHMNodeList list
= GetNodeList(parent);            
if (MessageBox.Show("是否删除文章(删除同时删除本地文件)?","确认", MessageBoxButtons.YesNo)== System.Windows.Forms.DialogResult.Yes)          {                
list.Remove((CHMNode)node.Tag);                
//同时删除文件              
if (System.IO.File.Exists(((CHMNode)node.Tag).Local))
{                    
System.IO.File.Delete(((CHMNode)node.Tag).Local);            
   }              
node.Remove();
//移除该节点                
}        
}

 

0
相关文章