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