UcTabWindow 布局多tab,加载编辑器和资源管理器等自定义控件

csharp 复制代码

using EA;
using EA_AutoModeler_64.Class;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using static EA_AutoModeler_64.FormStatusStatistics;
using static EA_AutoModeler_64.OpenAIClient.tables.ClassStructOpenAI;

namespace EA_AutoModeler_64.Template.UcTab
{
    public partial class UcTabWindow : UserControl
    {
        private SplitContainer splitContainer1;
        private SplitContainer splitContainer2;
        private TabControl tabControl1;
        private TabPage tabPageWork;
        private TabPage tabPageChat;
        private TabPage tabPageKnowledge;
        //private TabPage tabPageInformation;
        private TabPage tabPageModelSkills;
        private TabPage tabPageLargeModel;
        //private TabPage tabPageFileExplorer;

        private UcTabWork ucTabWork;
        private UcTabChat ucTabChat;
        private UcTabKnowledge ucTabKnowledge;
        //private UcTabInformation ucTabInformation;
        private UcTabModelSkills ucTabModelSkills;
        private UcTabLargeModel ucTabLargeModel;

        private FileExplorer fileExplorer;

        private Button btnToggleExplorer;  // 新增

        private EA.Repository repository = null;
        private string tabTitle = "";

        public string chat_id = "";
        public EA.Element currentElement = null;
        public EA.Package currentPackage = null;
        // 在类中添加新字段(与原有字段一起声明)
        private bool isFileExplorerExpanded = true;
        private int expandedPanel1Width = 200;          // 存储展开状态时 Panel1 的宽度
        private int COLLAPSED_PANEL2_WIDTH = 12;  // 折叠时 Panel2 显示边缘条的宽度

        public UcTabWindow()
        {
            InitializeComponent();
            try
            {
                InitializeControls();
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show("初始化控件失败: " + ex.Message);
            }
        }

        private void InitializeControls()
        {
            // 根据当前字体大小计算,但限制在 12~16 之间
            int fontSize = (int)this.Font.Size;
            COLLAPSED_PANEL2_WIDTH = Math.Max(12, Math.Min(16, (int)(fontSize * 1.2)));
            // 创建SplitContainer
            splitContainer1 = new SplitContainer();
            splitContainer1.Dock = DockStyle.Fill;
            splitContainer1.FixedPanel = FixedPanel.Panel1;
            // 暂时将最小尺寸设置为0,避免初始化验证错误
            splitContainer1.Panel1MinSize = 0;
            splitContainer1.Panel2MinSize = 0;
            splitContainer1.SplitterDistance = 200;

            // 创建SplitContainer
            splitContainer2 = new SplitContainer();
            splitContainer2.Dock = DockStyle.Fill;
            splitContainer2.FixedPanel = FixedPanel.Panel1;
            // 暂时将最小尺寸设置为0,避免初始化验证错误
            splitContainer2.Panel1MinSize = 0;
            splitContainer2.Panel2MinSize = 0;
            splitContainer2.SplitterDistance = 200;

            // 创建TabControl
            tabControl1 = new TabControl();
            tabControl1.Dock = DockStyle.Fill;

            // 创建TabPage
            tabPageWork = new TabPage("工作");
            tabPageChat = new TabPage("会话记录");
            tabPageKnowledge = new TabPage("知识库");            
            //tabPageInformation = new TabPage("资料库");
            tabPageModelSkills = new TabPage("技能库");
            tabPageLargeModel = new TabPage("大模型");

            // 添加TabPage到TabControl
            tabControl1.TabPages.Add(tabPageWork);
            tabControl1.TabPages.Add(tabPageChat);
            tabControl1.TabPages.Add(tabPageKnowledge);
            //tabControl1.TabPages.Add(tabPageInformation);
            tabControl1.TabPages.Add(tabPageModelSkills);
            tabControl1.TabPages.Add(tabPageLargeModel);

            // 创建各个Tab页的用户控件                        
            try
            { 
                ucTabWork = new UcTabWork();
                // 然后再添加到Tab页
                ucTabWork.Dock = DockStyle.Fill;                
                tabPageWork.Controls.Add(ucTabWork);
            }
            catch (Exception ex)
            {
                AppLog.Error("UcTabWindow InitializeControls ucTabWork: " + ex.Message);
            }
            try
            {
                ucTabChat = new UcTabChat();
                ucTabChat.Dock = DockStyle.Fill;
                tabPageChat.Controls.Add(ucTabChat);
            }
            catch (Exception ex)
            {
                AppLog.Error("UcTabWindow InitializeControls ucTabChat: " + ex.Message);
            }
            try
            {
                ucTabKnowledge = new UcTabKnowledge();
                ucTabKnowledge.Dock = DockStyle.Fill;
                tabPageKnowledge.Controls.Add(ucTabKnowledge);
            }
            catch (Exception ex)
            {
                AppLog.Error("UcTabWindow InitializeControls ucTabKnowledge: " + ex.Message);
            }
            //try
            //{
            //    ucTabInformation = new UcTabInformation();
            //    ucTabInformation.Dock = DockStyle.Fill;
            //    tabPageInformation.Controls.Add(ucTabInformation);
            //}
            //catch (Exception ex)
            //{
            //    AppLog.Error("UcTabWindow InitializeControls ucTabInformation: " + ex.Message);
            //}
            try {                 
                ucTabModelSkills = new UcTabModelSkills();
                ucTabModelSkills.Dock = DockStyle.Fill;
                tabPageModelSkills.Controls.Add(ucTabModelSkills);
            }
            catch (Exception ex)
            {
                AppLog.Error("UcTabWindow InitializeControls ucTabModelSkills: " + ex.Message);
            }
            try
            {
                ucTabLargeModel = new UcTabLargeModel();
                ucTabLargeModel.Dock = DockStyle.Fill;
                tabPageLargeModel.Controls.Add(ucTabLargeModel);
            }
            catch (Exception ex)
            {
                AppLog.Error("UcTabWindow InitializeControls ucTabLargeModel: " + ex.Message);
            }

            // 创建 splitContainer2 (垂直左右分割)
            splitContainer2 = new SplitContainer();
            splitContainer2.Dock = DockStyle.Fill;
            splitContainer2.Orientation = Orientation.Vertical;   // 明确左右分割
            splitContainer2.FixedPanel = FixedPanel.Panel1;       // 固定 Panel1(TabControl),Panel2 自适应
            splitContainer2.Panel1MinSize = 0;
            splitContainer2.Panel2MinSize = COLLAPSED_PANEL2_WIDTH;
            splitContainer2.SplitterDistance = 200;               // 初始 Panel1 宽度

            // 记录展开时的 Panel1 宽度
            expandedPanel1Width = splitContainer2.SplitterDistance;

            // 将 TabControl 放入 Panel1
            splitContainer2.Panel1.Controls.Add(tabControl1);

            // 创建边缘条(Panel2 中的左侧固定条)
            Panel edgePanel = new Panel
            {
                Width = COLLAPSED_PANEL2_WIDTH,
                Dock = DockStyle.Left,
                BackColor = SystemColors.ControlDark,
                Cursor = Cursors.Hand,
                BorderStyle = BorderStyle.None
            };
            btnToggleExplorer = new Button
            {
                Text = "▶",   // 初始为展开状态,箭头指向右侧(表示可折叠)
                TextAlign = ContentAlignment.MiddleCenter,
                Dock = DockStyle.Fill,
                FlatStyle = FlatStyle.Flat,               // 改用 Flat 样式
                BackColor = SystemColors.Control,         // 背景与边缘条一致,进一步融入
                Cursor = Cursors.Hand
            };
            btnToggleExplorer.FlatAppearance.BorderSize = 0;
            btnToggleExplorer.Click += (s, e) => ToggleFileExplorer();
            edgePanel.Controls.Add(btnToggleExplorer);

            // 资源管理器填充 Panel2 剩余区域
            fileExplorer = new FileExplorer();
            fileExplorer.Location = new Point(edgePanel.Width, 0);
            fileExplorer.Dock = DockStyle.None;
            fileExplorer.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            fileExplorer.Size = new Size(splitContainer2.Panel2.Width - edgePanel.Width, splitContainer2.Panel2.Height);
            // 绑定父窗体的 Resize 事件,动态调整
            splitContainer2.Panel2.Resize += (s, e) => {
                fileExplorer.Size = new Size(splitContainer2.Panel2.Width - edgePanel.Width, splitContainer2.Panel2.Height);
            };
            fileExplorer.ParentWindow = this;
            fileExplorer.WorkArea = ucTabWork;

            // 将边缘条和文件浏览器都添加到 Panel2
            splitContainer2.Panel2.Controls.Add(edgePanel);
            splitContainer2.Panel2.Controls.Add(fileExplorer);

            // 将 splitContainer2 放入 splitContainer1 的右侧面板
            splitContainer1.Panel2.Controls.Add(splitContainer2);

            // 添加TabControl的SelectedIndexChanged事件处理
            tabControl1.SelectedIndexChanged += TabControl1_SelectedIndexChanged;

            // 添加SplitContainer到当前控件
            this.Controls.Add(splitContainer1);


        }

        private void UcTabWindow_Load(object sender, EventArgs e)
        {
            try
            {
                splitContainer1.Panel1MinSize = 200;
                splitContainer1.Panel2MinSize = 300;
                splitContainer1.SplitterDistance = Clamp((int)(this.Width * 0.4),
                    splitContainer1.Panel1MinSize, this.Width - splitContainer1.Panel2MinSize);

                // 根据折叠状态设置 splitContainer2 的初始宽度
                if (isFileExplorerExpanded)
                {
                    int desired = (int)(this.Width * 0.4);
                    int max = splitContainer2.Width - splitContainer2.Panel2MinSize - splitContainer2.SplitterWidth;
                    splitContainer2.SplitterDistance = Clamp(desired, splitContainer2.Panel1MinSize, max);
                    expandedPanel1Width = splitContainer2.SplitterDistance;
                    fileExplorer.Visible = true;
                    btnToggleExplorer.Text = "▶";
                }
                else
                {
                    // 折叠状态:Panel1 宽度 = 总宽 - 边缘条宽 - 分割条宽
                    int newPanel1Width = splitContainer2.Width - COLLAPSED_PANEL2_WIDTH - splitContainer2.SplitterWidth;
                    splitContainer2.SplitterDistance = Math.Max(newPanel1Width, splitContainer2.Panel1MinSize);
                    fileExplorer.Visible = false;
                    btnToggleExplorer.Text = "◀";
                }

                this.SizeChanged += UcTabWindow_SizeChanged;
            }
            catch (Exception ex)
            {
                AppLog.Error("UcTabWindow_Load Exception: " + ex.Message);
            }
        }

        //private void UcTabWindow_SizeChanged(object sender, EventArgs e)
        //{
        //    // 在SizeChanged事件中重新计算SplitterDistance
        //    try
        //    {                
        //        // 设置SplitterDistance,确保在有效范围内
        //        if (this.Width > 0)
        //        {
        //            int maxSplitterDistance = this.Width - splitContainer1.Panel2MinSize;
        //            //splitContainer1.SplitterDistance = Math.Min(splitContainer1.Panel1MinSize, Math.Min(splitContainer1.SplitterDistance, maxSplitterDistance));
        //            splitContainer1.SplitterDistance = (int)(this.Width * 0.4);
        //            splitContainer2.SplitterDistance = (int)(this.Width * 0.4);
        //        }
        //        else
        //        {
        //            // 如果宽度为0,设置默认值
        //            splitContainer1.SplitterDistance = 200;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        AppLog.Error("UcTabWindow_SizeChanged Exception: " + ex.Message);
        //    }
        //}

        // 修改 UcTabWindow_SizeChanged 方法,处理折叠状态下的布局重算
        private void UcTabWindow_SizeChanged(object sender, EventArgs e)
        {
            try
            {
                if (this.Width <= 0) return;

                // 修正 splitContainer1
                int maxDist1 = this.Width - splitContainer1.Panel2MinSize;
                int dist1 = (int)(this.Width * 0.4);
                splitContainer1.SplitterDistance = Clamp(dist1, splitContainer1.Panel1MinSize, maxDist1);

                // 修正 splitContainer2(仅在当前距离超出有效范围时调整)
                if (splitContainer2 != null && splitContainer2.Width > 0)
                {
                    int minPanel1 = splitContainer2.Panel1MinSize;
                    int maxPanel1 = splitContainer2.Width - splitContainer2.Panel2MinSize - splitContainer2.SplitterWidth;
                    int current = splitContainer2.SplitterDistance;

                    if (current < minPanel1 || current > maxPanel1)
                    {
                        int newDist = Clamp(current, minPanel1, maxPanel1);
                        splitContainer2.SplitterDistance = newDist;
                        if (isFileExplorerExpanded)
                            expandedPanel1Width = newDist;
                    }
                }
            }
            catch (Exception ex)
            {
                AppLog.Error("UcTabWindow_SizeChanged Exception: " + ex.Message);
            }
        }

        private static int Clamp(int value, int min, int max)
        {
            if (value < min) return min;
            if (value > max) return max;
            return value;
        }

        // 优化后的 ToggleFileExplorer 方法
        public void ToggleFileExplorer()
        {
            if (isFileExplorerExpanded)
            {
                // 折叠
                fileExplorer.Visible = false;
                int splitterWidth = splitContainer2.SplitterWidth;
                int newPanel1Width = splitContainer2.Width - COLLAPSED_PANEL2_WIDTH - splitterWidth;
                newPanel1Width = Math.Max(newPanel1Width, splitContainer2.Panel1MinSize);
                splitContainer2.SplitterDistance = newPanel1Width;
                btnToggleExplorer.Text = "◀";
            }
            else
            {
                // 展开
                fileExplorer.Visible = true;
                int maxPanel1 = splitContainer2.Width - splitContainer2.Panel2MinSize - splitContainer2.SplitterWidth;
                int target = Math.Min(expandedPanel1Width, maxPanel1);
                target = Math.Max(target, splitContainer2.Panel1MinSize);
                splitContainer2.SplitterDistance = target;
                btnToggleExplorer.Text = "▶";
            }
            isFileExplorerExpanded = !isFileExplorerExpanded;
        }

        public bool IsFileExplorerCollapsed()
        {
            return !isFileExplorerExpanded;
        }

        // ResetToDefaultLayout 方法可保留,但建议重新实现以重置所有布局
        public void ResetToDefaultLayout()
        {
            if (splitContainer1 == null || splitContainer2 == null) return;
            // 确保文件浏览器展开
            if (!isFileExplorerExpanded)
                ToggleFileExplorer();  // 直接调用切换方法展开
            else
            {
                fileExplorer.Visible = true;
                int w = this.Width;
                if (w > 0)
                {
                    int dist1 = (int)(w * 0.4);
                    int max1 = w - splitContainer1.Panel2MinSize;
                    splitContainer1.SplitterDistance = Math.Max(splitContainer1.Panel1MinSize, Math.Min(dist1, max1));

                    int dist2 = (int)(w * 0.4);
                    int max2 = splitContainer2.Width - splitContainer2.Panel2MinSize - splitContainer2.SplitterWidth;
                    splitContainer2.SplitterDistance = Math.Max(splitContainer2.Panel1MinSize, Math.Min(dist2, max2));
                    expandedPanel1Width = splitContainer2.SplitterDistance;
                }
            }
            btnToggleExplorer.Text = "◀";
            isFileExplorerExpanded = true;
        }


        public void ShowList(EA.Repository repository, string title)
        {
            #region 初始化
            this.repository = repository;
            this.tabTitle = title;
            //Console.WriteLine("notesMermaid "+ notesMermaid);
            // 将repository传递给UcTabWork
            ucTabWork.ucTabWindow = this;
            //ucTabWork.ShowList(repository, title, notesMermaid);
            ucTabWork.ShowList(repository, title);
            ucTabKnowledge.RefreshParent += LoadModelKnowledgeBase;
            #endregion
            string celetype = Convert.ToString(repository.GetTreeSelectedItemType());
            if (celetype != "otPackage")
            {
                //System.Windows.Forms.MessageBox.Show("Please select an Package or Element with a Notes that is not empty!");
                //return;
            }
            //tree上选择的元素
            currentPackage = repository.GetTreeSelectedObject() as EA.Package;
            if (currentPackage.ParentID == 0)
            {
                //System.Windows.Forms.MessageBox.Show("Please select a sub-package!");
                //return;
            }
        }

        public void ShowLeft(string DiagramType="", string DiagramNotes = "")
        {
            if (string.IsNullOrEmpty(DiagramType) || string.IsNullOrEmpty(DiagramNotes))
            {
                return;
            }
            switch (DiagramType.ToLower())
            {
                case "activity":
                    ucActivityDiagram ucActivityDiagramObj = new ucActivityDiagram();
                    ucActivityDiagramObj.repository = this.repository;
                    ucActivityDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucActivityDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucActivityDiagramObj);
                    break;
                case "class":                    
                    ucClassDiagram ucClassDiagramObj = new ucClassDiagram();
                    ucClassDiagramObj.repository = this.repository;
                    ucClassDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucClassDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucClassDiagramObj);
                    break;
                case "class dictionary":
                case "classdictionary":
                    ucClassDictionary ucClassDictionaryObj = new ucClassDictionary();
                    ucClassDictionaryObj.repository = this.repository;
                    ucClassDictionaryObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucClassDictionaryObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucClassDictionaryObj);

                    break;
                case "usecase":
                    ucUsecaseDiagram ucUsecaseDiagramObj = new ucUsecaseDiagram();
                    ucUsecaseDiagramObj.repository = this.repository;
                    ucUsecaseDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucUsecaseDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucUsecaseDiagramObj);

                    break;
                case "behavior":
                    ucBehaviorDiagram ucBehaviorObj = new ucBehaviorDiagram();
                    ucBehaviorObj.repository = this.repository;
                    ucBehaviorObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucBehaviorObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucBehaviorObj);

                    break;
                case "dataflow":
                    ucDataflowDiagram ucDataflowObj = new ucDataflowDiagram();
                    ucDataflowObj.repository = this.repository;
                    ucDataflowObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucDataflowObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucDataflowObj);

                    break;
                case "sequence":
                    ucSequenceDiagram ucSequenceDiagramObj = new ucSequenceDiagram();
                    ucSequenceDiagramObj.repository = this.repository;
                    ucSequenceDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucSequenceDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucSequenceDiagramObj);
                    break;
                case "statemachine":
                    ucStateMachineDiagram ucStateMachineDiagramObj = new ucStateMachineDiagram();
                    ucStateMachineDiagramObj.repository = this.repository;
                    ucStateMachineDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucStateMachineDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucStateMachineDiagramObj);
                    break;
                case "component":
                    ucComponentDiagram ucComponentDiagramObj = new ucComponentDiagram();
                    ucComponentDiagramObj.repository = this.repository;
                    ucComponentDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucComponentDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucComponentDiagramObj);
                    break;
                case "deployment":
                    ucDeploymentDiagram ucDeploymentDiagramObj = new ucDeploymentDiagram();
                    ucDeploymentDiagramObj.repository = this.repository;
                    ucDeploymentDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucDeploymentDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucDeploymentDiagramObj);
                    break;
                case "composite structure":
                case "compositestructure":
                    ucCompositeStructureDiagram ucCompositeStructureDiagramObj = new ucCompositeStructureDiagram();
                    ucCompositeStructureDiagramObj.repository = this.repository;
                    ucCompositeStructureDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucCompositeStructureDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucCompositeStructureDiagramObj);
                    break;
                case "block definition":
                case "blockdefinition":
                    ucSysMLBlockDefinitionDiagram ucSysMLBlockDefinitionDiagramObj = new ucSysMLBlockDefinitionDiagram();
                    ucSysMLBlockDefinitionDiagramObj.repository = this.repository;
                    ucSysMLBlockDefinitionDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucSysMLBlockDefinitionDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucSysMLBlockDefinitionDiagramObj);
                    break;
                
                case "requirement":
                    ucSysMLRequirementDiagram ucSysMLRequirementDiagramObj = new ucSysMLRequirementDiagram();
                    ucSysMLRequirementDiagramObj.repository = this.repository;
                    ucSysMLRequirementDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucSysMLRequirementDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucSysMLRequirementDiagramObj);
                    break;
                case "internal block":
                case "internalblock":
                    ucSysMLInternalBlockDiagram ucSysMLInternalBlockDiagramObj = new ucSysMLInternalBlockDiagram();
                    ucSysMLInternalBlockDiagramObj.repository = this.repository;
                    ucSysMLInternalBlockDiagramObj.LoadItems(DiagramNotes);
                    // 清空Panel1的现有控件
                    splitContainer1.Panel1.Controls.Clear();
                    // 将新的用户控件添加到Panel1
                    ucSysMLInternalBlockDiagramObj.Dock = DockStyle.Fill;
                    splitContainer1.Panel1.Controls.Add(ucSysMLInternalBlockDiagramObj);
                    break;
                default:
                    MessageBox.Show("没有找到对应建模技能,请根据支持的建模技能编写NML", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    break;
            }
        }
        public void LoadModelKnowledgeBase(ModelKnowledgeBase modelKnowledgeBase)
        {
            ModelKnowledge modelKnowledge = new ModelKnowledge();
            modelKnowledge.title = modelKnowledgeBase.title;
            modelKnowledge.content = modelKnowledgeBase.content;

            MessageStyle.LoadModelKnowledgeHistory(ucTabWork.fctb, modelKnowledge);
            //labelModelTask.Text = "建模任务:" + modelKnowledge.title;
            //ucTabWork.LoadModelKnowledgeHistory(modelKnowledge);
        }

        private void TabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ucTabWork != null)
            {
                chat_id = ucTabWork.chat_id;
            }
            // 当切换到知识库标签页时重新加载数据
            if (tabControl1.SelectedTab == tabPageKnowledge && ucTabKnowledge != null)
            {
                ucTabKnowledge.LoadData();
            }
            if (tabControl1.SelectedTab == tabPageChat && ucTabChat != null)
            {                
                ucTabChat.chat_id = chat_id;
                ucTabChat.ShowList(repository, tabTitle);
            }
            if (tabControl1.SelectedTab == tabPageWork && ucTabWork != null)
            {
                ucTabWork.ReloadComboBox();
            }
        }










    }
}
相关推荐
Java&Develop1 小时前
dbeaver 如何添加 比如 我输入 sf 回车 编辑器会出现 sql select * from 的快捷
数据库·sql·编辑器
唐青枫1 小时前
别再把增删改查写成一锅粥!C#.NET CQRS 从原理到实战
c#·.net
weixin_4022784511 小时前
解决打开vscode编辑器ctrl+鼠标左键不能跳转定义问题 环境C++
vscode·编辑器·计算机外设
czhc114007566311 小时前
C# 428 线程、异步
开发语言·c#
唐青枫12 小时前
C#.NET ThreadLocal 深入解析:线程独享数据、性能收益与实战边界
c#·.net
烟话618 小时前
实际内存条,虚拟内存,堆,栈
c#
归途醉染19 小时前
Swifter.Json
c#·json·swifter.json
伽蓝_游戏19 小时前
第一章:解构游戏资源
游戏·unity·性能优化·c#·游戏引擎·游戏程序·assetbundle
星辰徐哥20 小时前
Unity C#入门:Visual Studio与Unity的关联配置
unity·c#·visual studio