2015-11-26 3 views
-1

У меня есть проект winForms, мой button_click 1 добавляет элементы моей одной из глав документов и разделов. Я хочу сохранить свои конфигурации в файле конфигурации test.json (он написан в формате JSON). Я сохраняю все, что выбрано, установив флажки. И позже я хочу загрузить, какие флажки отмечены. Но как подождать до button_click1 событие будет нажато, и мои флажки появятся. Мои файлы загрузки выглядит следующим образом:Как заставить мой метод ждать события нажатия кнопки в winforms

private void SaveConfig(string path) 
     { 
      var config = new DocConfig(); 
      config.Parts = new List<DocPart>(); 


      foreach (TreeNode node in treeView1.Nodes) 
      { 

       { 
        config.Parts.Add(new DocPart { NodeTitle = node.Text, NodeChecked = node.Checked }); 
       } 


        { 
         foreach (TreeNode child in node.Nodes) 
         { 
          config.Parts.Add(new DocPart { ChildTitle = child.Text, ChildChecked = child.Checked }); 
         } 
        } 


       var configString = config.SaveToString(); 
       File.WriteAllText(path, configString); 

      } 
     } 
     private void LoadConfig(string path) 
     { 

      var cfgString = File.ReadAllText(path); 
      var cfg = DocConfig.LoadFromString(cfgString); 


      foreach (var part in cfg.Parts) 
      { 
       foreach (TreeNode node in treeView1.Nodes) 
       { 
        if (part.NodeTitle == "chap1") 
        { 
         node.Checked = part.NodeChecked; 
        } 
        if (part.NodeTitle == "chap2") 
        { 
         node.Checked = part.NodeChecked; 
        } 
        if (part.NodeTitle == "chap3") 
        { 
         node.Checked = part.NodeChecked; 
        } 
       } 
      } 
     } 
    } 
} 

Удалены button1_Click() и добавили этот класс

private void Initializetreeview(); 

    treeView1.Nodes.Add(new TreeNode("chapter1") { Tag = @"\include {chapter1}" }); ; 
       treeView1.Nodes.Add(new TreeNode("chapter2") { Tag = @"\include {chapter2}" }); 
       treeView1.Nodes.Add(new TreeNode("chapter3") { Tag = @"\include {chapter3}" }); 

    treeView1.Nodes[0].Nodes.Add(new TreeNode("section1") { Tag = @"\input {sec1}" }); 
       treeView1.Nodes[1].Nodes.Add(new TreeNode("section2") { Tag = @"\input {sec2}" }); 
       treeView1.Nodes[2].Nodes.Add(new TreeNode("section3") { Tag = @"\input {sec3}" }); 

Удаление из добавленного списка button2_Click:

private void button2_Click(object sender, EventArgs e) 
     { 
      RemoveChecked(treeView1.Nodes); 
     } 

     void RemoveChecked(TreeNodeCollection nodes) 
     { 
      foreach (TreeNode checkedNode in FindCheckedNodes(nodes)) 
      { 
       nodes.Remove(checkedNode); 
      } 
     } 


     private List<TreeNode> FindCheckedNodes(TreeNodeCollection nodes) 
     { 
      List<TreeNode> checkedNodes = new List<TreeNode>(); 
      foreach (TreeNode node in nodes) 
      { 
       if (node.Checked) 
       { 
        checkedNodes.Add(node); 
       } 
       else 
       { 
        // find checked childs   
        checkedNodes.AddRange(FindCheckedNodes(node.Nodes)); 
       } 
      } 
      return checkedNodes; 
     } 

Вот мой обработчик события загрузки, где я позвоните мне: LoadConfig:

private void Form1_Load(object sender, EventArgs e) 
     { 
      Initializetreeview(); 
      var cmdArgs = Environment.GetCommandLineArgs(); 

      if (cmdArgs.Length == 1) 
      { 
       //MessageBox.Show("None file loaded as parameter"); 
      } 
      if (cmdArgs.Length == 2) 
      { 
       //MessageBox.Show("JSON file is not loaded as parameter"); 
       var dconfFilename = cmdArgs[1]; 
       LoadConfig(dconfFilename); 
      } 
     } 
+1

Переместить код на событие щелчка? Неясно, что вы имеете в виду ... – Gusman

+0

Я хочу сохранить и загрузить файл конфигурации файла с помощью настроек флажков. Поэтому я сохраняю свои флажки, но когда я хочу использовать их, как параметры командной строки, мне нужно подождать, пока не будет нажата кнопка button1_click. Затем я открываю каждый флажок и используя конфигурацию документа, я хочу проверить свои флажки, которые должны быть проверены. – Mantas

+0

Затем, как я уже сказал, переместите код в событие click. – Gusman

ответ

0

Поскольку LoadConfig метод предполагает, что TreeView управления уже имеют узлы с именами, необходимо инициализировать TreeView перед выполнением LoadConfig метода

//Create method which initialize treeview control with your nodes 
private void InitializeTreeView() 
{ 
    this.treeView1.Nodes.Add(new TreeNode("chapter1") { Tag = @"\include {chapter1}" }); 
    this.treeView1.Nodes.Add(new TreeNode("chapter2") { Tag = @"\include {chapter2}" }); 
    this.treeView1.Nodes.Add(new TreeNode("chapter3") { Tag = @"\include {chapter3}" }); 

    this.treeView1.Nodes[0].Nodes.Add(new TreeNode("section1") { Tag = @"\input {sec1}" }); 
    this.treeView1.Nodes[1].Nodes.Add(new TreeNode("section2") { Tag = @"\input {sec2}" }); 
    this.treeView1.Nodes[2].Nodes.Add(new TreeNode("section3") { Tag = @"\input {sec3}" }); 
} 

private void Form_Load(Object sender, EventArgs e) 
{ 
    this.InitializeTreeView(); 

    //Now you can load your config 
    var cmdArgs = Environment.GetCommandLineArgs(); 

    if (cmdArgs.Length == 1) 
    { 
     //MessageBox.Show("None file loaded as parameter"); 
    } 
    if (cmdArgs.Length == 2) 
    { 
     //MessageBox.Show("JSON file is not loaded as parameter"); 
     var dconfFilename = cmdArgs[1]; 
     LoadConfig(dconfFilename); 
    } 
} 
+0

Должен ли я оставить кнопку button1_click(), как сейчас? – Mantas

+0

Вам это больше не нужно, потому что TreeView будет заполнен узлами, уже находящимися в Loadhandhandler, которые выполняются один раз до показанной формы. – Fabio

+0

Да, спасибо за этот совет. Но все-таки мне нужно продолжить свое исследование, потому что оно не работает :) Я согласен с вашим ответом, но, может быть, вы можете дать некоторые подсказки, которые не могут работать в моей программе? – Mantas

Смежные вопросы