Show form in designer with code executed during load
我有一个使用Visual Studio 2013在C中制作的Windows窗体。该窗体包含一个有2列的ListView。listView本身是在initializecomponent()内部创建的,它是由vs.i自动生成的,实际上是在initializecomponent()外部添加列标题。问题是,我希望vs中的[design]视图显示我声明的列标题,但我不希望使initializecomponent()方法混乱,另外它还表示我不应该修改该方法中代码的内容。
基本上,我所做的是创建一个方法,将两个列标题添加到ListView并格式化它们:
1 2 3 4 5 | private void initRecipListView() { this.recipList.Columns.Add("Recipient", -2, System.Windows.Forms.HorizontalAlignment.Left); this.recipList.Columns.Add("Number of Reports", -2, System.Windows.Forms.HorizontalAlignment.Left); } |
我想调用这个方法,以便在运行时以及在vs设计器窗口内查看表单时,添加和显示这两列。我尝试将该方法放入表单本身的构造函数中,该方法在运行时工作,但不在设计器窗口中。
当我在设计器窗口中查看窗体时,是否知道需要将此方法放在何处才能调用和使用?
您可以从ListView派生自己的类并实现这样的方案。您需要的基本成分是在构造函数中预先设置列的数量,并公开属性以允许您设置列标题文本。重写onClientSizeChanged()以保持列居中并处理出现的垂直滚动条。
添加一个新类并粘贴下面显示的代码。编译。从工具栏顶部删除新控件。可以在设计器或代码中设置column1name和column2name属性。您将在设计器中得到所见即所得的视图。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | using System; using System.ComponentModel; using System.Windows.Forms; class MyListView : ListView { public MyListView() { this.Columns.Add("Unnamed1"); this.Columns.Add("Unnamed2"); this.View = View.Details; } public string Column1Name { get { return this.Columns[0].Text; } set { this.Columns[0].Text = value; } } public string Column2Name { get { return this.Columns[1].Text; } set { this.Columns[1].Text = value; } } [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [Browsable(false)] public new ListView.ColumnHeaderCollection Columns { get { return base.Columns; } } protected override void OnClientSizeChanged(EventArgs e) { base.Columns[0].Width = this.ClientSize.Width / 2; base.Columns[1].Width = this.ClientSize.Width - base.Columns[0].Width; base.OnClientSizeChanged(e); } } |