• Как повторить структуру treeview в menu?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Рекурсия:
    private void button1_Click(object sender, EventArgs e)
    {
      // создаем меню
      var menu = new MenuStrip();
      menu.Items.Add("Меню");
    
      // перебираем узлы
      foreach (TreeNode n in treeView1.Nodes)
      {
        // создаем элемент меню
        var menuItem = new ToolStripMenuItem();
        menuItem.Text = n.Text;
        // перебирем детей
        ConvertNodeToMenu(menuItem, n);
        // добавляем элемент в меню
        ((ToolStripMenuItem)menu.Items[0]).DropDownItems.Add(menuItem);
      }
          
      // добавляем меню на форму
      this.Controls.Add(menu);
    }
    
    private void ConvertNodeToMenu(ToolStripMenuItem menuParent, TreeNode node)
    {
      foreach (TreeNode n in node.Nodes)
      {
        // создаем элемент меню
        var menuItem = new ToolStripMenuItem();
        menuItem.Text = n.Text;
        // перебираем детей
        ConvertNodeToMenu(menuItem, n);
        // добавляем элемент в меню
        menuParent.DropDownItems.Add(menuItem);
      }
    }

    Вариант с LINQ:
    private void button1_Click(object sender, EventArgs e)
    {
      // создаем меню
      var menu = new MenuStrip();
      menu.Items.Add("Меню");
      // берем первый элемент меню
      var menuItem = (ToolStripMenuItem)menu.Items[0];
      // получаем узлы и добавляем в меню
      menuItem.DropDownItems.AddRange
      (
        treeView1.Nodes.Cast<TreeNode>().Select
        (
          n => new ToolStripMenuItem(n.Text, null, ConvertNodeToMenu(n))
        ).ToArray()
      );
      // добавляем меню на форму
      this.Controls.Add(menu);
    }
    
    private ToolStripMenuItem[] ConvertNodeToMenu(TreeNode node)
    {
      return node.Nodes.Cast<TreeNode>().Select
      (
        n => new ToolStripMenuItem(n.Text, null, ConvertNodeToMenu(n))
      ).ToArray();
    }
    Ответ написан
    6 комментариев
  • Как сменить часовой пояс программно (Windows)?

    Программно? Решение на PowerShell подойдет? Есть так же встроенная утилита - tzutil.exe:
    tzutil /l - покажет список доступных часовых поясов.
    tzutil /g - покажет текущий;
    tzutil /s "имя_пояса" - позволит установить новый.

    # прошу прощения, проморгал, что решение нужно на C#.
    Ответ написан
    1 комментарий
  • Программы для облегчения проектирования программ?

    @vanilla_men
    Can you draw the world?
    Visual Paradigm как вариант для проектирования, поддержка нотаций UML, SysML, OG ArchiMate, так же куча вариантов описания БП(BPMN и т.д.).
    Archi тоже неплох, помогает увидеть все в целом, прост в использовании и использует ArchiMate.
    Ответ написан
    Комментировать
  • Программы для облегчения проектирования программ?

    @stringer
    Выполнил несколько проектов в Enterprise Architect. Плюсы:
    1. внятный учёт требований к ПО, позволяющий реально понять какой реквест чем реализуется;
    2. связка с контролем версий, можно хотя бы понять что когда и как менялось;
    3. реально выполним round-trip (генерация/реверс/генерация), не без проблем конечно, но другими средствами я вообще не смог добиться на своём шарпе;
    Минусы:
    1. плохо работает с женериками, генерация возможна, реверс - нет, он их не видит;
    2. некоторая тормознутость;
    3. сложно с масштабными диаграммами, но может просто у меня монитор маленький
    Ответ написан
    Комментировать
  • Программы для облегчения проектирования программ?

    IgorO2
    @IgorO2
    73
    Проектирование

    Планирование и отслеживание:
    IBM Rational Requisite Pro
    IBM Rational/Telelogic DOORS
    Borland Caliber RM
    Sybase PowerDesigner
    ...
    Ответ написан
    Комментировать