2010-09-15 91 views
0

我在加载表单时最初使用根节点树形视图。我将在运行时将子节点添加为some.txt文件,方法是从用户右键单击根节点时显示的contextmenu中选择一个选项作为Addnew。现在我需要的是如果树的子节点追加到根,并且如果用户试图通过点击上下文菜单中的选项addnew来创建一个新节点,我想显示一个错误,因为只有一个孩子允许。如果treeview根节点包含子节点,则显示错误

我的示例代码添加一个子节点如下:

private void AddNew_Click(object sender, EventArgs e) 
    { 
     //if (tvwACH.Nodes.Count==1) 
     //{ 
     // MessageBox.Show("Only One File allowed"); 
     //} 
     //else 
     //{ 
      if (tvwACH.SelectedNode.Text != null) 
      { 
       string strSelectedNode = tvwACH.SelectedNode.Text.ToString(); 
       switch (strSelectedNode) 
       { 
        case "ACH": 
         { 
          Stream myStream; 

          SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 

          saveFileDialog1.InitialDirectory = @"C:\"; 
          saveFileDialog1.DefaultExt = "txt"; 
          saveFileDialog1.Filter = "(*.txt)|*.txt"; 
          saveFileDialog1.FilterIndex = 2; 
          saveFileDialog1.RestoreDirectory = true; 
          saveFileDialog1.ValidateNames = true; 
          if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
          { 
           FileName = saveFileDialog1.FileName; 
           if (FileName.Contains(" \\/:*?<>|")) 
           { 
            MessageBox.Show("File name should not contain \\/:*?<>|", "", MessageBoxButtons.OK, MessageBoxIcon.Error); 
           } 
           else 
           { 
            if ((myStream = saveFileDialog1.OpenFile()) != null) 
            { 
             FileName = saveFileDialog1.FileName; 
             TreeNode newNode = new TreeNode(FileName); 
             newNode.SelectedImageIndex = 1; 
             tvwACH.SelectedNode.Nodes.Add(newNode); 
             TreeNode NodeFileHeader = newNode.Nodes.Add("FileHeader"); 
             myStream.Close(); 
            } 
           } 

          } 
          break; 
         } 
        case "FileHeader": 
         { 
          sr = new StreamReader(FileName); 
          strLen = sr.ReadLine(); 

          if (strLen == null) 
          { 
           sr.Close(); 
           Form frmFileHeader = new frmFileHeader(this); 
           frmFileHeader.ShowDialog(this); 

          } 
          else 
          { 
           MessageBox.Show("Only One File Header is allowed for a file", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
          } 
          break; 
         } 
        case "BatchHeader": 
         { 
          Form frmBatch = new frmBatch(this); 
          frmBatch.ShowDialog(); 
          break; 
         } 
       } 
      } 
     //} 

    } 
+0

您将重构该代码,对吗? – flq 2010-09-15 16:27:50

回答

1

没有用户曾经喜欢得到一个消息框,告诉她,她做了一件愚蠢的耳光。改善您的用户界面,只需禁用不应该使用的菜单项即可。使用上下文菜单的打开事件,如下所示:

private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) { 
     addNewToolStripMenuItem.Enabled = tvwACH.Nodes.Count > 1; 
    } 
+0

但即使根节点不包含子节点,它也不会显示上下文菜单。 – Dotnet 2010-09-16 07:43:45

+0

呃,什么?我无法理解你的评论。 – 2010-09-16 12:08:57

+0

对于您给出的代码,不允许我显示上下文菜单,即使根目录不是孩子。我要求的是如果树根已经有一个子节点,并且如果我右键单击根,并且如果我尝试添加新节点,它应该被禁用 – Dotnet 2010-09-18 04:02:15