如何在Windows窗体中创建树视图菜单?

时间:2013-12-09 03:39:24

标签: c# winforms forms menu treeview

在我目前的项目中,我有6种不同类型的促销活动的多种形式。我目前的UI设计是在运行时弹出一个迷你表单,允许用户选择促销类型并根据选择将它们指向每个表单。

相反,我想使用TreeView左侧窗格中的Windows Explorer控件,并将它们分组到一个主根下,这样我就不需要为每种类型的促销创建多个表单。

布局将是这样的:

enter image description here

  

我的问题是如何管理不同形式的控件?

如果我将所有控件放在一个表单下并在NodeMouseClick事件上显示/隐藏,我的设计视图将非常混乱。

tab control,我可以manage a related set of controls under each tab

但我认为对每种类型的促销使用标签控件都不是正确的方法。

非常感谢任何帮助或建议!

3 个答案:

答案 0 :(得分:0)

最简单的方法是将您的应用转换为MDI,以便重复使用现有表单。

答案 1 :(得分:0)

如果每个表单上的控件相同但值不同,则可以轻松使用一个表单和一组值列表,您可以将相应集合中的值插入表单中。如果控件不同,请设计可以存储在内存中的不同面板或组框,并根据需要添加到表单中。

答案 2 :(得分:0)

可能的方法是使用用户控件。

这样的事情应该有效

    private UCDummy1 ucDummy1;

    private void TreeView_Loaded(object sender, RoutedEventArgs e)
    {
        var item = new TreeViewItem();
        item.Header = "Options";
        item.ItemsSource = new string[] {"Dummy1", "Dummy2", "Dummy3"};
        var tree = sender as TreeView;
        tree.Items.Add(item);

        PopulateConfigUserControls();
    }

    private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        var tree = sender as TreeView;
        if (tree.SelectedItem is string)
        {
            string selectedUC = tree.SelectedItem.ToString();

            PanelOption.Children.Clear();

            if (selectedUC == "Dummy1")
            {
                PanelOption.Children.Add(ucDummy1);
            }
        }
    }

    private void PopulateConfigUserControls()
    {
        ucDummy1 = new UCDummy1();
        ucDummy1.TextBoxVoornaam.Text = Settings.Default.Voornaam;
        ucDummy1.TextBoxAchternaam.Text = Settings.Default.Achternaam;
    }

    private void ButtonSave_Click(object sender, RoutedEventArgs e)
    {
        Settings.Default.Voornaam = ucDummy1.TextBoxVoornaam.Text;
        Settings.Default.Achternaam = ucDummy1.TextBoxAchternaam.Text;
        Settings.Default.Save();
    }