really daring subject! DataGrid MyBase.OnPaint -> content

  • Thread starter Thread starter DraguVaso
  • Start date Start date
D

DraguVaso

Hi,

I want to override the MyBase.OnPaint(ByVal pe As
System.Windows.Forms.PaintEventArgs) of the DataGrid, to have some custom
property's designed (other column headers etc).

The problem is that I don't know the content of the original MyBase.OnPaint,
so I don't know what I need to put in my overriden Sub. does anybody knows
the content of it? Or is there a way to figure it out? Maybe somewhere in
the pe-argument?

Any help would be really appreciated!

thanks a lot,

Pieter Coucke
 
Hello,
You don't need to re-write everything... First call the OnPaint method
of base from the overridden OnPaint method and then write your code
custom drawing. something like this:

Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs)
MyBase.OnPaint(pe)
pe.Graphics.DrawString(....) ' this is your code... custom drawing.

HTH. Cheers.
Maqsood Ahmed [MCP C#,SQL Server]
Kolachi Advanced Technologies
http://www.kolachi.net
 
DraguVaso said:
I want to override the MyBase.OnPaint() of the DataGrid, .. . .
The problem is that I don't know the content of the original
MyBase.OnPaint, so I don't know what I need to put in my
overriden Sub.
.. . .
is there a way to figure it out?

1. Override OnPaint with a routine containing no code at all.
2. Run your application.

The base method did whatever /doesn't/ happen any more ;-))

HTH (but doubt it),
Phill W.
 
Hehehe thanks, I tried that alreaddy before, and it was like that that I
figured out Ireally needed the orignal code in it, hehe :-)
 
well, I did try it like this already, but the result isn't too good: For my
own Column Headers it is even ugly: When you click on them you see for one
second the orignal column headers, and than when the whole grid is repainted
it paints the new ones... Really not a nice solution :-/
 
Download Reflector and take a look at it yourself. It will show the
code in VB, C# or Delphi!
 
Hello,
Well ColumnHeader painting is something that is pain to everyone. I
have been trying to find out a way to do it myself too. Even the MS
painting for column header doesn't workout well.. try to set
ColumnHeader back and fore colors... you'll find out abt it ;)

Maqsood Ahmed [MCP C#,SQL Server]
Kolachi Advanced Technologies
http://www.kolachi.net
 
Hm wel ok, it's really nice, but I'm afraid it won't help me doing what I
want to do :-/ It uses functions that are private declared in the datagrid,
so I can't use them in my inherited datagrid. Anybody has a solution?
 
Hm wel ok, it's really nice, but I'm afraid it won't help me doing what I
want to do :-/ It uses functions that are private declared in the datagrid,
so I can't use them in my inherited datagrid. Anybody has a solution?

There's nothing preventing you from calling Mybase.OnPaint yourself:

Protected Overrides Sub OnPaint( _
ByVal pe As System.Windows.Forms.PaintEventArgs)

' call the parent
MyBase.OnPaint(pe)

' now do some more stuff

End Sub
 
I did it already like that, but the problem is that it's really not a nice
solution: It draws the 'normal' column headers each time, and after half a
second it draws my custom column headers. This happens each time the grid is
refreshed or when there is clicked on the column-headers...

Isn't there a way to prevent things ike that? For instance some function
that repaints the control in memory, and shows it when everything is
complete (and my custom column headers are already put before the
original)... Isn't there some kind of function like this that tells the
datagrid to wait to do the updates just until it has the permission?
 
Yessssssssssssss!!! I found it myself:
I call the base-class and than draw my custom functions in my
OnPaint-override. But this give me some stupid flickering, and always showed
a fraction of a second the old column-heaeders. But by using DoubleBuffer
and AllPaintingInWmPaint this problem is solved!! really great!!!! :-)

Public Sub EnableDoubleBuffering()
' Set the value of the double-buffering style bits to true.
Me.SetStyle(ControlStyles.DoubleBuffer _
Or ControlStyles.UserPaint _
Or ControlStyles.AllPaintingInWmPaint, _
True)
Me.UpdateStyles()
End Sub
 
Hey! can you tell me how you find out when you paint the headers? I also written an overriden function Paint that I am using to customise the datagrid's cells but I don't manage to customise also the columns headers.

I would really need an answer if you can.
Thanks!
 
Back
Top