Hey all,
You notice how when you mouse over each thread in this forum how the
highlights, well how can I do this same thing in my win form with my datagrid?
thanks,
rodchar 10 1166
Hi,
You need to make your own columnstyle for that. Here is a column i
am working on that does that.
Code
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Imports System.Reflection
Imports System.ComponentModel
Public Class HotTrackTextBoxColumn
Inherits DataGridTextBoxColumn
Dim c As Integer
Dim rectPaint As New RectangleF
Dim fnt As New Font(MyBase.TextBox.Font.Name, MyBase.TextBox.Font.Size,
FontStyle.Underline)
Dim WithEvents dg As DataGrid
Dim oldCell As New Point(-1, -1)
Dim isInCell As Boolean = False
Public Sub HandleMouseMove(ByVal sender As Object, ByVal e As
MouseEventArgs) Handles dg.MouseMove
Dim g As Graphics = dg.CreateGraphics
Dim bounds As Rectangle
Dim hti As DataGrid.HitTestInfo = dg.HitTest(New Point(e.X, e.Y))
isInCell = (hti.Row > -1 And hti.Column = c)
Static bRedraw As Boolean = False
If isInCell Then
Dim pt As Point
pt = New Point(hti.Row, hti.Column)
If Not pt.Equals(oldCell) Then
'
' Create a region where we want the datagrid to redraw
' So the datagrid doesn't flash.
'
Dim pthToRedraw As New Drawing2D.GraphicsPath
Dim rgnToRedraw As Region
Dim rCell As Rectangle = dg.GetCellBounds(pt.X, pt.Y)
pthToRedraw.AddRectangle(rCell)
If oldCell.X > -1 Then
'
' Have to redraw last cell
'
pthToRedraw.AddRectangle(dg.GetCellBounds(oldCell. X, oldCell.Y))
End If
rgnToRedraw = New Region(pthToRedraw)
dg.Invalidate(rgnToRedraw)
End If
'
' Flag datagrid for redraw
'
bRedraw = True
oldCell = pt
Else
'
' Only redraw when needed
'
If bRedraw Then
dg.Invalidate(dg.GetCellBounds(oldCell.X, oldCell.Y))
End If
bRedraw = False
oldCell = New Point(-1, -1)
End If
End Sub
Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics,
ByVal bounds As System.Drawing.Rectangle, ByVal source As
System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal
backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush,
ByVal alignToRight As Boolean)
Static bPainted As Boolean = False
'
' First time we paint get a reference to datagrid
' So we can consume its events
'
If Not bPainted Then
dg = Me.DataGridTableStyle.DataGrid
c = -1
For Each grdCol As DataGridColumnStyle In
Me.DataGridTableStyle.GridColumnStyles
c += 1
If grdCol.MappingName = Me.MappingName Then Exit For
Next
End If
bPainted = True
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)
Dim pnHot As New Pen(SystemColors.HotTrack)
Dim brHot As New SolidBrush(Color.FromArgb(128, SystemColors.HotTrack))
' see through brush
If MouseOverCell(rowNum) Then
bounds.Inflate(-1, -1)
g.FillRectangle(brHot, bounds)
g.DrawRectangle(pnHot, bounds)
End If
Dim r As New RectangleF(bounds.X, bounds.Y, bounds.Width, bounds.Height)
rectPaint = r
End Sub
Public ReadOnly Property MouseOverCell(ByVal rownum As Integer) As Boolean
Get
Dim pt As New Point(rownum, c)
Return pt.Equals(oldCell)
End Get
End Property
End Class
Link to example http://www.onteorasoftware.com/Downl...lumnstyles.zip
Ken
-----------------------
"rodchar" <ro*****@discussions.microsoft.com> wrote in message
news:46**********************************@microsof t.com...
Hey all,
You notice how when you mouse over each thread in this forum how the
highlights, well how can I do this same thing in my win form with my
datagrid?
thanks,
rodchar
I appreciate it.
"Ken Tucker [MVP]" wrote: Hi,
You need to make your own columnstyle for that. Here is a column i am working on that does that.
Code
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Imports System.Reflection
Imports System.ComponentModel
Public Class HotTrackTextBoxColumn
Inherits DataGridTextBoxColumn
Dim c As Integer
Dim rectPaint As New RectangleF
Dim fnt As New Font(MyBase.TextBox.Font.Name, MyBase.TextBox.Font.Size, FontStyle.Underline)
Dim WithEvents dg As DataGrid
Dim oldCell As New Point(-1, -1)
Dim isInCell As Boolean = False
Public Sub HandleMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles dg.MouseMove
Dim g As Graphics = dg.CreateGraphics
Dim bounds As Rectangle
Dim hti As DataGrid.HitTestInfo = dg.HitTest(New Point(e.X, e.Y))
isInCell = (hti.Row > -1 And hti.Column = c)
Static bRedraw As Boolean = False
If isInCell Then
Dim pt As Point
pt = New Point(hti.Row, hti.Column)
If Not pt.Equals(oldCell) Then
'
' Create a region where we want the datagrid to redraw
' So the datagrid doesn't flash.
'
Dim pthToRedraw As New Drawing2D.GraphicsPath
Dim rgnToRedraw As Region
Dim rCell As Rectangle = dg.GetCellBounds(pt.X, pt.Y)
pthToRedraw.AddRectangle(rCell)
If oldCell.X > -1 Then
'
' Have to redraw last cell
'
pthToRedraw.AddRectangle(dg.GetCellBounds(oldCell. X, oldCell.Y))
End If
rgnToRedraw = New Region(pthToRedraw)
dg.Invalidate(rgnToRedraw)
End If
'
' Flag datagrid for redraw
'
bRedraw = True
oldCell = pt
Else
'
' Only redraw when needed
'
If bRedraw Then
dg.Invalidate(dg.GetCellBounds(oldCell.X, oldCell.Y))
End If
bRedraw = False
oldCell = New Point(-1, -1)
End If
End Sub Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)
Static bPainted As Boolean = False
'
' First time we paint get a reference to datagrid
' So we can consume its events
'
If Not bPainted Then
dg = Me.DataGridTableStyle.DataGrid
c = -1
For Each grdCol As DataGridColumnStyle In Me.DataGridTableStyle.GridColumnStyles
c += 1
If grdCol.MappingName = Me.MappingName Then Exit For
Next
End If
bPainted = True
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)
Dim pnHot As New Pen(SystemColors.HotTrack)
Dim brHot As New SolidBrush(Color.FromArgb(128, SystemColors.HotTrack))
' see through brush
If MouseOverCell(rowNum) Then
bounds.Inflate(-1, -1)
g.FillRectangle(brHot, bounds)
g.DrawRectangle(pnHot, bounds)
End If Dim r As New RectangleF(bounds.X, bounds.Y, bounds.Width, bounds.Height)
rectPaint = r
End Sub
Public ReadOnly Property MouseOverCell(ByVal rownum As Integer) As Boolean
Get
Dim pt As New Point(rownum, c)
Return pt.Equals(oldCell)
End Get
End Property
End Class
Link to example http://www.onteorasoftware.com/Downl...lumnstyles.zip
Ken ----------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:46**********************************@microsof t.com... Hey all,
You notice how when you mouse over each thread in this forum how the highlights, well how can I do this same thing in my win form with my datagrid?
thanks, rodchar
all the code goes behind my Form1 code behind?
"Ken Tucker [MVP]" wrote: Hi,
You need to make your own columnstyle for that. Here is a column i am working on that does that.
Code
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Imports System.Reflection
Imports System.ComponentModel
Public Class HotTrackTextBoxColumn
Inherits DataGridTextBoxColumn
Dim c As Integer
Dim rectPaint As New RectangleF
Dim fnt As New Font(MyBase.TextBox.Font.Name, MyBase.TextBox.Font.Size, FontStyle.Underline)
Dim WithEvents dg As DataGrid
Dim oldCell As New Point(-1, -1)
Dim isInCell As Boolean = False
Public Sub HandleMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles dg.MouseMove
Dim g As Graphics = dg.CreateGraphics
Dim bounds As Rectangle
Dim hti As DataGrid.HitTestInfo = dg.HitTest(New Point(e.X, e.Y))
isInCell = (hti.Row > -1 And hti.Column = c)
Static bRedraw As Boolean = False
If isInCell Then
Dim pt As Point
pt = New Point(hti.Row, hti.Column)
If Not pt.Equals(oldCell) Then
'
' Create a region where we want the datagrid to redraw
' So the datagrid doesn't flash.
'
Dim pthToRedraw As New Drawing2D.GraphicsPath
Dim rgnToRedraw As Region
Dim rCell As Rectangle = dg.GetCellBounds(pt.X, pt.Y)
pthToRedraw.AddRectangle(rCell)
If oldCell.X > -1 Then
'
' Have to redraw last cell
'
pthToRedraw.AddRectangle(dg.GetCellBounds(oldCell. X, oldCell.Y))
End If
rgnToRedraw = New Region(pthToRedraw)
dg.Invalidate(rgnToRedraw)
End If
'
' Flag datagrid for redraw
'
bRedraw = True
oldCell = pt
Else
'
' Only redraw when needed
'
If bRedraw Then
dg.Invalidate(dg.GetCellBounds(oldCell.X, oldCell.Y))
End If
bRedraw = False
oldCell = New Point(-1, -1)
End If
End Sub Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)
Static bPainted As Boolean = False
'
' First time we paint get a reference to datagrid
' So we can consume its events
'
If Not bPainted Then
dg = Me.DataGridTableStyle.DataGrid
c = -1
For Each grdCol As DataGridColumnStyle In Me.DataGridTableStyle.GridColumnStyles
c += 1
If grdCol.MappingName = Me.MappingName Then Exit For
Next
End If
bPainted = True
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)
Dim pnHot As New Pen(SystemColors.HotTrack)
Dim brHot As New SolidBrush(Color.FromArgb(128, SystemColors.HotTrack))
' see through brush
If MouseOverCell(rowNum) Then
bounds.Inflate(-1, -1)
g.FillRectangle(brHot, bounds)
g.DrawRectangle(pnHot, bounds)
End If Dim r As New RectangleF(bounds.X, bounds.Y, bounds.Width, bounds.Height)
rectPaint = r
End Sub
Public ReadOnly Property MouseOverCell(ByVal rownum As Integer) As Boolean
Get
Dim pt As New Point(rownum, c)
Return pt.Equals(oldCell)
End Get
End Property
End Class
Link to example http://www.onteorasoftware.com/Downl...lumnstyles.zip
Ken ----------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:46**********************************@microsof t.com... Hey all,
You notice how when you mouse over each thread in this forum how the highlights, well how can I do this same thing in my win form with my datagrid?
thanks, rodchar
Rodchar,
I am still not sure if you are making programs for the web of for windows
forms, what is it, and when it is webform, I advice you to tell that in your
questions, I think I remember it when you answer it now. However in this
newsgroup is the winform default when not told.
Cor
Hi,
Sorry assumed this was for a windows form grid
Ken
-------------------------
"rodchar" <ro*****@discussions.microsoft.com> wrote in message
news:B2**********************************@microsof t.com...
all the code goes behind my Form1 code behind?
"Ken Tucker [MVP]" wrote: Hi,
You need to make your own columnstyle for that. Here is a column i am working on that does that.
Code
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Imports System.Reflection
Imports System.ComponentModel
Public Class HotTrackTextBoxColumn
Inherits DataGridTextBoxColumn
Dim c As Integer
Dim rectPaint As New RectangleF
Dim fnt As New Font(MyBase.TextBox.Font.Name, MyBase.TextBox.Font.Size, FontStyle.Underline)
Dim WithEvents dg As DataGrid
Dim oldCell As New Point(-1, -1)
Dim isInCell As Boolean = False
Public Sub HandleMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles dg.MouseMove
Dim g As Graphics = dg.CreateGraphics
Dim bounds As Rectangle
Dim hti As DataGrid.HitTestInfo = dg.HitTest(New Point(e.X, e.Y))
isInCell = (hti.Row > -1 And hti.Column = c)
Static bRedraw As Boolean = False
If isInCell Then
Dim pt As Point
pt = New Point(hti.Row, hti.Column)
If Not pt.Equals(oldCell) Then
'
' Create a region where we want the datagrid to redraw
' So the datagrid doesn't flash.
'
Dim pthToRedraw As New Drawing2D.GraphicsPath
Dim rgnToRedraw As Region
Dim rCell As Rectangle = dg.GetCellBounds(pt.X, pt.Y)
pthToRedraw.AddRectangle(rCell)
If oldCell.X > -1 Then
'
' Have to redraw last cell
'
pthToRedraw.AddRectangle(dg.GetCellBounds(oldCell. X, oldCell.Y))
End If
rgnToRedraw = New Region(pthToRedraw)
dg.Invalidate(rgnToRedraw)
End If
'
' Flag datagrid for redraw
'
bRedraw = True
oldCell = pt
Else
'
' Only redraw when needed
'
If bRedraw Then
dg.Invalidate(dg.GetCellBounds(oldCell.X, oldCell.Y))
End If
bRedraw = False
oldCell = New Point(-1, -1)
End If
End Sub Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)
Static bPainted As Boolean = False
'
' First time we paint get a reference to datagrid
' So we can consume its events
'
If Not bPainted Then
dg = Me.DataGridTableStyle.DataGrid
c = -1
For Each grdCol As DataGridColumnStyle In Me.DataGridTableStyle.GridColumnStyles
c += 1
If grdCol.MappingName = Me.MappingName Then Exit For
Next
End If
bPainted = True
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)
Dim pnHot As New Pen(SystemColors.HotTrack)
Dim brHot As New SolidBrush(Color.FromArgb(128, SystemColors.HotTrack))
' see through brush
If MouseOverCell(rowNum) Then
bounds.Inflate(-1, -1)
g.FillRectangle(brHot, bounds)
g.DrawRectangle(pnHot, bounds)
End If Dim r As New RectangleF(bounds.X, bounds.Y, bounds.Width, bounds.Height)
rectPaint = r
End Sub
Public ReadOnly Property MouseOverCell(ByVal rownum As Integer) As Boolean
Get
Dim pt As New Point(rownum, c)
Return pt.Equals(oldCell)
End Get
End Property
End Class
Link to example http://www.onteorasoftware.com/Downl...lumnstyles.zip
Ken ----------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:46**********************************@microsof t.com... Hey all,
You notice how when you mouse over each thread in this forum how the highlights, well how can I do this same thing in my win form with my datagrid?
thanks, rodchar
yes, this is a windows forms project.
"Cor Ligthert" wrote: Rodchar,
I am still not sure if you are making programs for the web of for windows forms, what is it, and when it is webform, I advice you to tell that in your questions, I think I remember it when you answer it now. However in this newsgroup is the winform default when not told.
Cor
Rodchar,
Than you would not talk about :
ispostback
codebehind
That is typical webform terminology
In a windowform you have a design form and normalcode.
Ispostback does not exist.
You can real good confuse us.
:-)))
Cor
"rodchar" <ro*****@discussions.microsoft.com> yes, this is a windows forms project.
"Cor Ligthert" wrote:
Rodchar,
I am still not sure if you are making programs for the web of for windows forms, what is it, and when it is webform, I advice you to tell that in your questions, I think I remember it when you answer it now. However in this newsgroup is the winform default when not told.
Cor
You're right it is a win form project. So am i correct to say put it in the
code behind of the form or in a class by itself?
"Ken Tucker [MVP]" wrote: Hi,
Sorry assumed this was for a windows form grid
Ken ------------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:B2**********************************@microsof t.com... all the code goes behind my Form1 code behind?
"Ken Tucker [MVP]" wrote:
Hi,
You need to make your own columnstyle for that. Here is a column i am working on that does that.
Code
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Imports System.Reflection
Imports System.ComponentModel
Public Class HotTrackTextBoxColumn
Inherits DataGridTextBoxColumn
Dim c As Integer
Dim rectPaint As New RectangleF
Dim fnt As New Font(MyBase.TextBox.Font.Name, MyBase.TextBox.Font.Size, FontStyle.Underline)
Dim WithEvents dg As DataGrid
Dim oldCell As New Point(-1, -1)
Dim isInCell As Boolean = False
Public Sub HandleMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles dg.MouseMove
Dim g As Graphics = dg.CreateGraphics
Dim bounds As Rectangle
Dim hti As DataGrid.HitTestInfo = dg.HitTest(New Point(e.X, e.Y))
isInCell = (hti.Row > -1 And hti.Column = c)
Static bRedraw As Boolean = False
If isInCell Then
Dim pt As Point
pt = New Point(hti.Row, hti.Column)
If Not pt.Equals(oldCell) Then
'
' Create a region where we want the datagrid to redraw
' So the datagrid doesn't flash.
'
Dim pthToRedraw As New Drawing2D.GraphicsPath
Dim rgnToRedraw As Region
Dim rCell As Rectangle = dg.GetCellBounds(pt.X, pt.Y)
pthToRedraw.AddRectangle(rCell)
If oldCell.X > -1 Then
'
' Have to redraw last cell
'
pthToRedraw.AddRectangle(dg.GetCellBounds(oldCell. X, oldCell.Y))
End If
rgnToRedraw = New Region(pthToRedraw)
dg.Invalidate(rgnToRedraw)
End If
'
' Flag datagrid for redraw
'
bRedraw = True
oldCell = pt
Else
'
' Only redraw when needed
'
If bRedraw Then
dg.Invalidate(dg.GetCellBounds(oldCell.X, oldCell.Y))
End If
bRedraw = False
oldCell = New Point(-1, -1)
End If
End Sub Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)
Static bPainted As Boolean = False
'
' First time we paint get a reference to datagrid
' So we can consume its events
'
If Not bPainted Then
dg = Me.DataGridTableStyle.DataGrid
c = -1
For Each grdCol As DataGridColumnStyle In Me.DataGridTableStyle.GridColumnStyles
c += 1
If grdCol.MappingName = Me.MappingName Then Exit For
Next
End If
bPainted = True
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)
Dim pnHot As New Pen(SystemColors.HotTrack)
Dim brHot As New SolidBrush(Color.FromArgb(128, SystemColors.HotTrack))
' see through brush
If MouseOverCell(rowNum) Then
bounds.Inflate(-1, -1)
g.FillRectangle(brHot, bounds)
g.DrawRectangle(pnHot, bounds)
End If Dim r As New RectangleF(bounds.X, bounds.Y, bounds.Width, bounds.Height)
rectPaint = r
End Sub
Public ReadOnly Property MouseOverCell(ByVal rownum As Integer) As Boolean
Get
Dim pt As New Point(rownum, c)
Return pt.Equals(oldCell)
End Get
End Property
End Class
Link to example http://www.onteorasoftware.com/Downl...lumnstyles.zip
Ken ----------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:46**********************************@microsof t.com... Hey all,
You notice how when you mouse over each thread in this forum how the highlights, well how can I do this same thing in my win form with my datagrid?
thanks, rodchar
Hi,
Class by itself. You did see the link to the example at the end.
Ken
-----------------------
"rodchar" <ro*****@discussions.microsoft.com> wrote in message
news:D6**********************************@microsof t.com...
You're right it is a win form project. So am i correct to say put it in the
code behind of the form or in a class by itself?
"Ken Tucker [MVP]" wrote: Hi,
Sorry assumed this was for a windows form grid
Ken ------------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:B2**********************************@microsof t.com... all the code goes behind my Form1 code behind?
"Ken Tucker [MVP]" wrote:
Hi,
You need to make your own columnstyle for that. Here is a column i am working on that does that.
Code
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Imports System.Reflection
Imports System.ComponentModel
Public Class HotTrackTextBoxColumn
Inherits DataGridTextBoxColumn
Dim c As Integer
Dim rectPaint As New RectangleF
Dim fnt As New Font(MyBase.TextBox.Font.Name, MyBase.TextBox.Font.Size, FontStyle.Underline)
Dim WithEvents dg As DataGrid
Dim oldCell As New Point(-1, -1)
Dim isInCell As Boolean = False
Public Sub HandleMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles dg.MouseMove
Dim g As Graphics = dg.CreateGraphics
Dim bounds As Rectangle
Dim hti As DataGrid.HitTestInfo = dg.HitTest(New Point(e.X, e.Y))
isInCell = (hti.Row > -1 And hti.Column = c)
Static bRedraw As Boolean = False
If isInCell Then
Dim pt As Point
pt = New Point(hti.Row, hti.Column)
If Not pt.Equals(oldCell) Then
'
' Create a region where we want the datagrid to redraw
' So the datagrid doesn't flash.
'
Dim pthToRedraw As New Drawing2D.GraphicsPath
Dim rgnToRedraw As Region
Dim rCell As Rectangle = dg.GetCellBounds(pt.X, pt.Y)
pthToRedraw.AddRectangle(rCell)
If oldCell.X > -1 Then
'
' Have to redraw last cell
'
pthToRedraw.AddRectangle(dg.GetCellBounds(oldCell. X, oldCell.Y))
End If
rgnToRedraw = New Region(pthToRedraw)
dg.Invalidate(rgnToRedraw)
End If
'
' Flag datagrid for redraw
'
bRedraw = True
oldCell = pt
Else
'
' Only redraw when needed
'
If bRedraw Then
dg.Invalidate(dg.GetCellBounds(oldCell.X, oldCell.Y))
End If
bRedraw = False
oldCell = New Point(-1, -1)
End If
End Sub Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)
Static bPainted As Boolean = False
'
' First time we paint get a reference to datagrid
' So we can consume its events
'
If Not bPainted Then
dg = Me.DataGridTableStyle.DataGrid
c = -1
For Each grdCol As DataGridColumnStyle In Me.DataGridTableStyle.GridColumnStyles
c += 1
If grdCol.MappingName = Me.MappingName Then Exit For
Next
End If
bPainted = True
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)
Dim pnHot As New Pen(SystemColors.HotTrack)
Dim brHot As New SolidBrush(Color.FromArgb(128, SystemColors.HotTrack))
' see through brush
If MouseOverCell(rowNum) Then
bounds.Inflate(-1, -1)
g.FillRectangle(brHot, bounds)
g.DrawRectangle(pnHot, bounds)
End If Dim r As New RectangleF(bounds.X, bounds.Y, bounds.Width, bounds.Height)
rectPaint = r
End Sub
Public ReadOnly Property MouseOverCell(ByVal rownum As Integer) As Boolean
Get
Dim pt As New Point(rownum, c)
Return pt.Equals(oldCell)
End Get
End Property
End Class
Link to example http://www.onteorasoftware.com/Downl...lumnstyles.zip
Ken ----------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:46**********************************@microsof t.com... Hey all,
You notice how when you mouse over each thread in this forum how the highlights, well how can I do this same thing in my win form with my datagrid?
thanks, rodchar
I did not see that, thank you again for everyone's help.
"Ken Tucker [MVP]" wrote: Hi,
Class by itself. You did see the link to the example at the end.
Ken ----------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:D6**********************************@microsof t.com... You're right it is a win form project. So am i correct to say put it in the code behind of the form or in a class by itself?
"Ken Tucker [MVP]" wrote:
Hi,
Sorry assumed this was for a windows form grid
Ken ------------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:B2**********************************@microsof t.com... all the code goes behind my Form1 code behind?
"Ken Tucker [MVP]" wrote:
Hi,
You need to make your own columnstyle for that. Here is a column i am working on that does that.
Code
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms
Imports System.Reflection
Imports System.ComponentModel
Public Class HotTrackTextBoxColumn
Inherits DataGridTextBoxColumn
Dim c As Integer
Dim rectPaint As New RectangleF
Dim fnt As New Font(MyBase.TextBox.Font.Name, MyBase.TextBox.Font.Size, FontStyle.Underline)
Dim WithEvents dg As DataGrid
Dim oldCell As New Point(-1, -1)
Dim isInCell As Boolean = False
Public Sub HandleMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles dg.MouseMove
Dim g As Graphics = dg.CreateGraphics
Dim bounds As Rectangle
Dim hti As DataGrid.HitTestInfo = dg.HitTest(New Point(e.X, e.Y))
isInCell = (hti.Row > -1 And hti.Column = c)
Static bRedraw As Boolean = False
If isInCell Then
Dim pt As Point
pt = New Point(hti.Row, hti.Column)
If Not pt.Equals(oldCell) Then
'
' Create a region where we want the datagrid to redraw
' So the datagrid doesn't flash.
'
Dim pthToRedraw As New Drawing2D.GraphicsPath
Dim rgnToRedraw As Region
Dim rCell As Rectangle = dg.GetCellBounds(pt.X, pt.Y)
pthToRedraw.AddRectangle(rCell)
If oldCell.X > -1 Then
'
' Have to redraw last cell
'
pthToRedraw.AddRectangle(dg.GetCellBounds(oldCell. X, oldCell.Y))
End If
rgnToRedraw = New Region(pthToRedraw)
dg.Invalidate(rgnToRedraw)
End If
'
' Flag datagrid for redraw
'
bRedraw = True
oldCell = pt
Else
'
' Only redraw when needed
'
If bRedraw Then
dg.Invalidate(dg.GetCellBounds(oldCell.X, oldCell.Y))
End If
bRedraw = False
oldCell = New Point(-1, -1)
End If
End Sub Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal source As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)
Static bPainted As Boolean = False
'
' First time we paint get a reference to datagrid
' So we can consume its events
'
If Not bPainted Then
dg = Me.DataGridTableStyle.DataGrid
c = -1
For Each grdCol As DataGridColumnStyle In Me.DataGridTableStyle.GridColumnStyles
c += 1
If grdCol.MappingName = Me.MappingName Then Exit For
Next
End If
bPainted = True
MyBase.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight)
Dim pnHot As New Pen(SystemColors.HotTrack)
Dim brHot As New SolidBrush(Color.FromArgb(128, SystemColors.HotTrack))
' see through brush
If MouseOverCell(rowNum) Then
bounds.Inflate(-1, -1)
g.FillRectangle(brHot, bounds)
g.DrawRectangle(pnHot, bounds)
End If Dim r As New RectangleF(bounds.X, bounds.Y, bounds.Width, bounds.Height)
rectPaint = r
End Sub
Public ReadOnly Property MouseOverCell(ByVal rownum As Integer) As Boolean
Get
Dim pt As New Point(rownum, c)
Return pt.Equals(oldCell)
End Get
End Property
End Class
Link to example http://www.onteorasoftware.com/Downl...lumnstyles.zip
Ken ----------------------- "rodchar" <ro*****@discussions.microsoft.com> wrote in message news:46**********************************@microsof t.com... Hey all,
You notice how when you mouse over each thread in this forum how the highlights, well how can I do this same thing in my win form with my datagrid?
thanks, rodchar This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: greg.knaddison |
last post by:
Hi,
I'm trying to use the httpclient within Jython (see
http://jakarta.apache.org/commons/httpclient/ for more information on
the httpclient).
My Jython version is:
Jython 2.1 on...
|
by: Mtcc |
last post by:
it seem like microsoft support in .NET control for ME lenguage to write
Right-to-left (RTL)
but until now i not success to get textbox that get in Run time RTL kyboard?
i set Lang in Form to ME...
|
by: news.microsoft.com |
last post by:
To Microsoft and fellow MSDN Universal subscribers...
Regarding new MSDN Universal (I mean Premier) price and level changes:
1) Way too expensive for the small and medium developer Universal...
|
by: Stamen Gortchev |
last post by:
Hi all,
I think there is an inherent problem with most examples on the internet
(with MSDN, too!) showing datagrid's databinding. Here is, how they look
like:
========================
On...
|
by: daniel |
last post by:
Hi guys
Has Anyone a msdn theme??, I want use him in my aspnet 2.0 project.
thanks in advance
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
| |