组合项目并从TabPages运行表单

时间:2014-10-09 03:40:02

标签: c# .net winforms forms

我想将几个winform应用程序组合到一个主应用程序中。我创建了一个新的winform项目/解决方案,并添加了两个解决方案中的表单。我将TabPages添加到第一个启动其他表单的表单中。我还按照combine multiple C# projects中的建议将项目输出类型更改为库。当我单击类生成器选项卡时,我很难加载第二个表单(classBuilder)。

form w/tabpages

我用Google搜索了如何将表单添加到TabPage中,并且大多数帖子都有我插入的非常相似的代码,但是单击选项卡时没有任何反应。作为新手,我不知道我是在正确的道路上还是将主题代码放在正确的位置。需要某种比我聪明的方式让我走上正轨。我有一些顾虑:1)每个表单都有一个唯一的app.config文件,如果我尝试重命名它,主表单不会填写,所以我把它放回到App.config。我导入了第二个表单的配置文件,并将其重命名为ClassBuild.config,如果我在专家帮助下运行它,那么第二个表单将无法填写。 2)我不明白为什么我会发出'Form frmClassBuilder = new Form();'当该名称的表格已经存在时。这段代码好吗?

namespace VX130
{
    public partial class VX130UI : Form
    {
        public DataTable tblPKIEN;
        public DataTable tblsAttributes;
        public DataTable tbltAttributes;
        public DataSet   dsVX130;

         SqlDataAdapter da = new SqlDataAdapter();

        public VX130UI()
        {
            InitializeComponent();
            WindowState = FormWindowState.Maximized;

            //attempt to add form to a tabpage
            Form frmClassBuilder = new Form();
            frmClassBuilder.TopLevel = false;
            tabPage9.Controls.Add(frmClassBuilder);
            frmClassBuilder.Parent = this;
            frmClassBuilder.WindowState = FormWindowState.Maximized;
            frmClassBuilder.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            frmClassBuilder.Dock = DockStyle.Fill;
            frmClassBuilder.Show();
            //end attempt

            // tabControl1
        // 
        this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
        | System.Windows.Forms.AnchorStyles.Left) 
        | System.Windows.Forms.AnchorStyles.Right)));
        this.tabControl1.Controls.Add(this.tabPage1);
        this.tabControl1.Controls.Add(this.tabPage2);
        this.tabControl1.Controls.Add(this.tabPage8);
        this.tabControl1.Controls.Add(this.tabPage9);
        this.tabControl1.Controls.Add(this.tabPage10);
        this.tabControl1.Controls.Add(this.tabPage11);
        this.tabControl1.Controls.Add(this.tabPage12);
        this.tabControl1.Location = new System.Drawing.Point(13, 65);
        this.tabControl1.Name = "tabControl1";
        this.tabControl1.SelectedIndex = 0;
        this.tabControl1.Size = new System.Drawing.Size(963, 445);
        this.tabControl1.TabIndex = 2;

        // tabPage9
        // 
        this.tabPage9.Location = new System.Drawing.Point(4, 22);
        this.tabPage9.Name = "tabPage9";
        this.tabPage9.Padding = new System.Windows.Forms.Padding(3);
        this.tabPage9.Size = new System.Drawing.Size(955, 419);
        this.tabPage9.TabIndex = 3;
        this.tabPage9.Text = "Class Builder";
        this.tabPage9.UseVisualStyleBackColor = true;
        this.tabPage9.Controls.Add(ClassBuilderUI.frmClassBuilder());    is a ‘type’ and not valid in given context

2 个答案:

答案 0 :(得分:0)

显示TabPage,而不是表单。并且不要为要添加的表单设置Parent和WindowState之类的内容:

//Form frmClassBuilder = new Form();
ClassBuilderUI.frmClassBuilder frmClassBuilder = new ClassBuilderUI.frmClassBuilder(); <== to reference existing form (exists in solution
frmClassBuilder.Dock = DockStyle.Fill;
frmClassBuilder.TopLevel = false;
frmClassBuilder.Visible = true;
tabPage9.Controls.Add(frmClassBuilder);
tabPage9.Show();
  

我不明白为什么我会发出'Form frmClassBuilder = new   Form();'当该名称的表格已经存在时。

存在于哪里?怎么样?您需要将表单实例添加到Tab页面控件集合中。如果您已有实例,则可以添加它。确保它没有调用Close()Dispose()

ClassBuilderTab_MouseClick处理程序中的代码看起来毫无用处。我会删除它,除非你有其他需要它。

答案 1 :(得分:0)

我找到了创建现有表单实例的缺失部分(存在于解决方案中)。

    public VX130UI()
    {
        InitializeComponent();
        WindowState = FormWindowState.Maximized;
        ClassBuilderUI.frmClassBuilder frmClassBuilder = new ClassBuilderUI.frmClassBuilder(); <== to reference existing form (exists in solution
        //Form frmClassBuilder = new Form();
        frmClassBuilder.Dock = DockStyle.Fill;
        frmClassBuilder.TopLevel = false;
        frmClassBuilder.Visible = true;
        tabPage9.Controls.Add(frmClassBuilder);
        tabPage9.Show();