2010-09-15 5 views
0

J'ai une vue arborescente initialement avec un nœud racine lorsque le formulaire est chargé. Je vais ajouter le noeud enfant comme fichier some.txt au moment de l'exécution en sélectionnant une option comme Addnew du menu contextuel qui s'affichait lorsque l'utilisateur cliquait sur le noeud racine. Maintenant, ce dont j'ai besoin est si l'arbre a un nœud enfant ajouté à la racine et si l'utilisateur essaie de créer un nouveau nœud en cliquant sur l'option addnew du menu contextuel je voudrais afficher une erreur comme un seul enfant autorisé.Erreur d'affichage si un nœud racine treeview contient un nœud enfant

Mon exemple de code pour ajouter un nœud enfant se présente comme suit

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

Vous allez refactoriser ce code, n'est-ce pas? – flq

Répondre

1

Aucun utilisateur aime jamais se giflé avec une boîte de message qui lui dit qu'elle a fait quelque chose de stupide. Améliorez votre interface utilisateur, désactivez simplement l'élément de menu s'il ne doit pas être utilisé. Utilisez l'événement d'ouverture du menu contextuel, comme ceci:

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

Mais il ne montre pas le menu contextuel même si le nœud racine ne consiste pas en un nœud enfant. – Dotnet

+0

Euh, quoi? Je ne peux pas donner un sens à votre remarque. –

+0

Pour le code que vous avez donné il ne me permet pas d'afficher le menu contextuel même si la racine n'a pas d'enfant. Ce que j'ai demandé est si l'arbre ROOT a déjà un noeud enfant et si je clique droit sur la racine et si j'essaye d'ajouter un nouveau noeud il devrait être désactivé – Dotnet

Questions connexes