这是我的应用程序的概述:

这基本上是一本烹饪书。用户可以创建一个食谱,然后在该食谱中创建食谱。我有一个Cookbook类和一个Recipe类。 CookBook跟踪与食谱相关的食谱,Recipe跟踪食谱的内容。

对于用户界面,我有一个树形视图,其中将显示CookBook中的食谱。我有一个TabControl,它将显示与每个配方关联的选项卡。这些选项卡由用户在运行时动态创建。

当用户单击配方之一时,我希望TabControl显示与该特定配方相关的选项卡。当用户单击其他配方时,我希望先前选择的选项卡消失而当前选择的选项卡显示。 (旁注:我将稍后将标签和内容的内容保存到文件中,以用于保存)

我希望Recipe类包含有关TabControl的详细信息(配方中有多少个选项卡,每个选项卡的标题,选项卡的内容)。但是我不希望Recipe负责创建Tabs或TabControl。

我的问题是,我如何完成上面的粗体部分?人们对这类问题有何看法和经验?这类问题的最佳做法是什么?

谢谢!

最佳答案

我希望以下代码能给您一个思路

public Form1()
    {
        InitializeComponent();

        Recipe r1 = new Recipe() { Text = "Re1" };
        Recipe r2 = new Recipe() { Text = "Re2" };
        Recipe r3 = new Recipe() { Text = "Re3" };


        listBox1.Items.Add(r1);
        listBox1.Items.Add(r2);
        listBox1.Items.Add(r3);


        tabControl1.TabPages.Add(new AdvancedTabPage() { Recipe = r1,Text=r1.ToString() });
        tabControl1.TabPages.Add(new AdvancedTabPage() { Recipe = r2, Text = r2.ToString() });
        tabControl1.TabPages.Add(new AdvancedTabPage() { Recipe = r3, Text = r3.ToString() });

        listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);

    }

    void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (listBox1.SelectedItem != null)
            foreach (AdvancedTabPage ad in tabControl1.TabPages)
            {
                if (ad.Recipe == listBox1.SelectedItem)
                {
                    tabControl1.SelectedTab = ad;
                    break;
                }
            }

    }

    public class AdvancedTabPage : System.Windows.Forms.TabPage
    {
        public Recipe Recipe{get;set;}


    }

    public class Recipe
    {
        public string Text = "";

        public override string ToString()
        {
            return Text;
        }
    }

关于c# - 用户单击Treeview节点时,tabcontrol发生更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6795666/

10-13 07:33
查看更多