2013-05-16 95 views
4

我创建一个自定义listview控制。我将它设置为每次添加新列时添加一个新按钮。
当我运行包含我的自定义控制程序,栏按钮得到妥善安置。但是,在设计时,当我添加或删除列时,控件不会更新添加的按钮。设计时重绘

它们在运行时确定,但在设计时,我需要关闭窗体并重新打开它(强制重新绘制),以更新栏按钮。
如何以编程方式强制重绘我的用户控件?
列属性看起来是这样的:

<MergableProperty(False)> _ 
    <Editor("System.Windows.Forms.Design.ColumnHeaderCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", GetType(UITypeEditor))> _ 
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _ 
    <Localizable(True)> _ 
    Public ReadOnly Property Columns() As ListView.ColumnHeaderCollection 
     Get 
      Return ListView1.Columns 
     End Get 
    End Property 

我试图重新绘制这样的控制:

Me.Invalidate() 
    Dim x As New Rectangle With {.X = Me.Location.X, .Y = Me.Location.Y, .Size = Me.Size} 
    Me.NotifyInvalidate(x) 

但由于某些原因,它不工作。在设计时,每次添加一列时,都不会添加相应的按钮。

+0

代码工作的大部分。目前还不清楚按钮是否与列标题相同,我认为它是。我也猜测你的控件正在加载一个ListView控件,而不是从它继承。我在VS2012上测试过。 – LarsTech

+0

是的,这是真的,我使用的是一个列表视图控件,我的控件只是添加一些自定义样式按钮作为该列表视图的标题..出于某些原因,他们不更新设计模式... – rusoaica

+0

我建议你编辑你的文章的代码就如何显示这些按钮。 – LarsTech

回答

1

只是一个快速的想法,可能不是最好的解决方案,但它并没有伤害尝试,我猜它即将正常工作,即使如我所说,这不是最好的方式来做到这一点。

在您使用添加子/删除列,添加以下内容:

Dim Graphics As Graphics = [yourform].CreateGraphics 
Dim ParamArg As New PaintEventArgs(Graphics, [yourform].ClientRectangle) 
InvokePaint(Me, ParamArgs) 

这应当执行讨厌的东西将油漆本身每次您添加/删除。