如何在inheritance的WinForm中向Container添加控件

我在另一个项目中有一个基本表单,它对所有WinForms程序强制执行相同的外观。 我从该BaseForminheritance,创建自己的模板BaseView。 我的这个模板有其他控件,如ProgressBar,Timer和TableLayoutPanel。

我现在想inheritance我的BaseView并使用Designer来添加我的程序特定控件,但是我不能删除任何类似Panel或任何其他控件的内容。 我已经尝试了一些建议,比如确保基本表单的组件是公开的,但无济于事 – 大多数TLP的属性仍然是灰色的。

有人可能会给我任何建议吗? 非常感谢!


partial class BaseView { ///  /// Required designer variable. ///  private System.ComponentModel.IContainer components = null; ///  /// Clean up any resources being used. ///  /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code ///  /// Required method for Designer support - do not modify /// the contents of this method with the code editor. ///  private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BaseView)); this.tableLayoutPanel_Form = new System.Windows.Forms.TableLayoutPanel(); this.panel_Buttons = new System.Windows.Forms.Panel(); this.panel_MainBody = new System.Windows.Forms.Panel(); this.progressBar = new System.Windows.Forms.ProgressBar(); this.timer_ProgressBar = new System.Windows.Forms.Timer(this.components); this.tableLayoutPanel_Form.SuspendLayout(); this.SuspendLayout(); // // lblFormId // this.lblFormId.AutoSize = false; this.lblFormId.Location = new System.Drawing.Point(390, 9); this.lblFormId.Size = new System.Drawing.Size(98, 13); this.lblFormId.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // btnClose // this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnClose.Location = new System.Drawing.Point(447, 5); this.btnClose.Size = new System.Drawing.Size(41, 21); this.btnClose.TabIndex = 4; // // tableLayoutPanel_Form // this.tableLayoutPanel_Form.ColumnCount = 1; this.tableLayoutPanel_Form.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel_Form.Controls.Add(this.panel_Buttons, 0, 2); this.tableLayoutPanel_Form.Controls.Add(this.panel_MainBody, 0, 1); this.tableLayoutPanel_Form.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel_Form.Location = new System.Drawing.Point(0, 0); this.tableLayoutPanel_Form.Name = "tableLayoutPanel_Form"; this.tableLayoutPanel_Form.RowCount = 3; this.tableLayoutPanel_Form.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); this.tableLayoutPanel_Form.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel_Form.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); this.tableLayoutPanel_Form.Size = new System.Drawing.Size(496, 322); this.tableLayoutPanel_Form.TabIndex = 26; // // panel_Buttons // this.panel_Buttons.Dock = System.Windows.Forms.DockStyle.Fill; this.panel_Buttons.Location = new System.Drawing.Point(3, 295); this.panel_Buttons.Name = "panel_Buttons"; this.panel_Buttons.Size = new System.Drawing.Size(490, 24); this.panel_Buttons.TabIndex = 0; // // panel_MainBody // this.panel_MainBody.Dock = System.Windows.Forms.DockStyle.Fill; this.panel_MainBody.Location = new System.Drawing.Point(3, 33); this.panel_MainBody.Name = "panel_MainBody"; this.panel_MainBody.Size = new System.Drawing.Size(490, 256); this.panel_MainBody.TabIndex = 1; // // progressBar // this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.progressBar.Location = new System.Drawing.Point(383, 324); this.progressBar.Name = "progressBar"; this.progressBar.Size = new System.Drawing.Size(112, 21); this.progressBar.TabIndex = 27; // // timer_ProgressBar // this.timer_ProgressBar.Interval = 700; this.timer_ProgressBar.Tick += new System.EventHandler(this.timer_Tick); // // BaseView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.CancelButton = this.btnClose; this.ClientSize = new System.Drawing.Size(496, 346); this.Controls.Add(this.progressBar); this.Controls.Add(this.tableLayoutPanel_Form); this.Cursor = System.Windows.Forms.Cursors.Default; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MinimumSize = new System.Drawing.Size(512, 384); this.Name = "BaseView"; this.Controls.SetChildIndex(this.btnClose, 0); this.Controls.SetChildIndex(this.tableLayoutPanel_Form, 0); this.Controls.SetChildIndex(this.lblFormId, 0); this.Controls.SetChildIndex(this.lblFormDescription, 0); this.Controls.SetChildIndex(this.progressBar, 0); this.tableLayoutPanel_Form.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.ProgressBar progressBar; private System.Windows.Forms.Timer timer_ProgressBar; public System.Windows.Forms.TableLayoutPanel tableLayoutPanel_Form; public System.Windows.Forms.Panel panel_Buttons; public System.Windows.Forms.Panel panel_MainBody; } 

这篇 MSDN文章给了我答案。

“并非所有控件都支持基本表单中的可视inheritance。以下控件不支持本演练中描述的场景: WebBrowser,ToolStrip,ToolStripPanel,TableLayoutPanel,FlowLayoutPanel,DataGridView 。inheritance表单中的这些控件始终是只读的,无论是什么您使用的修饰符(私有,受保护或公共)。“

我使用了一个停靠的Panel和一个SplitContainer而不是TLP,现在我可以将任何我想要的内容放入其中。