J'ai 2 datagrid côte à côte. Si je 'Scroll' un datagrid, j'aimerais que
l'autre datagrid suive le scroll de l'autre.
Comment faire?
Merci de votre aide.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Zoury
Bonjour! :O)
Voici une façon non api d'y parvenir :
on se fait une classe qui hérite du DataGrid, cela nous donne accès à 2 membres protégées nommés HorizScrollBar et VertScrollBar (qui sont les ScrollBars du grid). J'ai exposé la valeur (position) des ces barres de défilement en tant que propriété publique dans notre objet (HorizScrollValue et VertScrollValue). J'ai aussi ajouté une propriété publique nommé LinkedGrid qui précise à quel autre Grid notre Grid est lier.. '*** ' Classe LinkableDataGrid (herite de DataGrid) Option Explicit On
Private _dgLinkedGrid As LinkableDataGrid Private _bLinkedGridIsChanging As Boolean Private _bScrollValueIsChanging As Boolean
Public Property LinkedGrid() As LinkableDataGrid Get Return _dgLinkedGrid End Get Set(ByVal Value As LinkableDataGrid) If (Not _bLinkedGridIsChanging) Then _bLinkedGridIsChanging = True _dgLinkedGrid = Value _dgLinkedGrid.LinkedGrid = Me _bLinkedGridIsChanging = False End If End Set End Property Public Property HorizScrollValue() As Int32 Get Return Me.HorizScrollBar.Value End Get Set(ByVal Value As Int32) Me.HorizScrollBar.Value = Value End Set End Property Public Property VertScrollValue() As Int32 Get Return Me.VertScrollBar.Value End Get Set(ByVal Value As Int32) Me.VertScrollBar.Value = Value End Set End Property
Protected Overrides Sub GridHScrolled(ByVal sender As Object, ByVal se As System.Windows.Forms.ScrollEventArgs) If (Not _bScrollValueIsChanging) Then MyBase.GridHScrolled(sender, se) If (Not LinkedGrid Is Nothing) Then _dgLinkedGrid.HorizScrollValue = se.NewValue _bScrollValueIsChanging = True ' permet la resynchronisation du grid avec sa scrollbar _dgLinkedGrid.GridHScrolled(sender, se) _bScrollValueIsChanging = False End If End If End Sub
Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se As System.Windows.Forms.ScrollEventArgs) If (Not _bScrollValueIsChanging) Then MyBase.GridVScrolled(sender, se) If (Not LinkedGrid Is Nothing) Then _dgLinkedGrid.VertScrollValue = se.NewValue _bScrollValueIsChanging = True ' permet la resynchronisation du grid avec sa scrollbar _dgLinkedGrid.GridVScrolled(sender, se) _bScrollValueIsChanging = False End If End If End Sub
End Class '***
on l'utilise comme suit : '*** ' Classe Form1 (test la classe LinkableDataGrid) Option Explicit On
Imports System.Data Imports System.Data.SqlClient
Public Class Form1 Inherits System.Windows.Forms.Form
Private _dt As DataTable Friend WithEvents DataGrid1 As LinkableDataGrid Friend WithEvents DataGrid2 As LinkableDataGrid
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
InitGrids() InitDataSource() BindDataSource()
End Sub
Private Sub InitGrids()
Me.DataGrid1 = New LinkableDataGrid Me.DataGrid2 = New LinkableDataGrid
-- Cordialement Yanick MVP pour Visual Basic "Annie L." a écrit dans le message de news:
J'ai 2 datagrid côte à côte. Si je 'Scroll' un datagrid, j'aimerais que l'autre datagrid suive le scroll de l'autre. Comment faire? Merci de votre aide.
Bonjour! :O)
Voici une façon non api d'y parvenir :
on se fait une classe qui hérite du DataGrid, cela nous donne accès à 2
membres protégées nommés HorizScrollBar et VertScrollBar (qui sont les
ScrollBars du grid). J'ai exposé la valeur (position) des ces barres de
défilement en tant que propriété publique dans notre objet (HorizScrollValue
et VertScrollValue). J'ai aussi ajouté une propriété publique nommé
LinkedGrid qui précise à quel autre Grid notre Grid est lier..
'***
' Classe LinkableDataGrid (herite de DataGrid)
Option Explicit On
Private _dgLinkedGrid As LinkableDataGrid
Private _bLinkedGridIsChanging As Boolean
Private _bScrollValueIsChanging As Boolean
Public Property LinkedGrid() As LinkableDataGrid
Get
Return _dgLinkedGrid
End Get
Set(ByVal Value As LinkableDataGrid)
If (Not _bLinkedGridIsChanging) Then
_bLinkedGridIsChanging = True
_dgLinkedGrid = Value
_dgLinkedGrid.LinkedGrid = Me
_bLinkedGridIsChanging = False
End If
End Set
End Property
Public Property HorizScrollValue() As Int32
Get
Return Me.HorizScrollBar.Value
End Get
Set(ByVal Value As Int32)
Me.HorizScrollBar.Value = Value
End Set
End Property
Public Property VertScrollValue() As Int32
Get
Return Me.VertScrollBar.Value
End Get
Set(ByVal Value As Int32)
Me.VertScrollBar.Value = Value
End Set
End Property
Protected Overrides Sub GridHScrolled(ByVal sender As Object, ByVal se
As System.Windows.Forms.ScrollEventArgs)
If (Not _bScrollValueIsChanging) Then
MyBase.GridHScrolled(sender, se)
If (Not LinkedGrid Is Nothing) Then
_dgLinkedGrid.HorizScrollValue = se.NewValue
_bScrollValueIsChanging = True
' permet la resynchronisation du grid avec sa scrollbar
_dgLinkedGrid.GridHScrolled(sender, se)
_bScrollValueIsChanging = False
End If
End If
End Sub
Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se
As System.Windows.Forms.ScrollEventArgs)
If (Not _bScrollValueIsChanging) Then
MyBase.GridVScrolled(sender, se)
If (Not LinkedGrid Is Nothing) Then
_dgLinkedGrid.VertScrollValue = se.NewValue
_bScrollValueIsChanging = True
' permet la resynchronisation du grid avec sa scrollbar
_dgLinkedGrid.GridVScrolled(sender, se)
_bScrollValueIsChanging = False
End If
End If
End Sub
End Class
'***
on l'utilise comme suit :
'***
' Classe Form1 (test la classe LinkableDataGrid)
Option Explicit On
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Inherits System.Windows.Forms.Form
Private _dt As DataTable
Friend WithEvents DataGrid1 As LinkableDataGrid
Friend WithEvents DataGrid2 As LinkableDataGrid
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
InitGrids()
InitDataSource()
BindDataSource()
End Sub
Private Sub InitGrids()
Me.DataGrid1 = New LinkableDataGrid
Me.DataGrid2 = New LinkableDataGrid
--
Cordialement
Yanick
MVP pour Visual Basic
"Annie L." <AnnieL@discussions.microsoft.com> a écrit dans le message de
news:C16C533F-0002-4D0B-A177-AC75CC520CDA@microsoft.com...
J'ai 2 datagrid côte à côte. Si je 'Scroll' un datagrid, j'aimerais que
l'autre datagrid suive le scroll de l'autre.
Comment faire?
Merci de votre aide.
on se fait une classe qui hérite du DataGrid, cela nous donne accès à 2 membres protégées nommés HorizScrollBar et VertScrollBar (qui sont les ScrollBars du grid). J'ai exposé la valeur (position) des ces barres de défilement en tant que propriété publique dans notre objet (HorizScrollValue et VertScrollValue). J'ai aussi ajouté une propriété publique nommé LinkedGrid qui précise à quel autre Grid notre Grid est lier.. '*** ' Classe LinkableDataGrid (herite de DataGrid) Option Explicit On
Private _dgLinkedGrid As LinkableDataGrid Private _bLinkedGridIsChanging As Boolean Private _bScrollValueIsChanging As Boolean
Public Property LinkedGrid() As LinkableDataGrid Get Return _dgLinkedGrid End Get Set(ByVal Value As LinkableDataGrid) If (Not _bLinkedGridIsChanging) Then _bLinkedGridIsChanging = True _dgLinkedGrid = Value _dgLinkedGrid.LinkedGrid = Me _bLinkedGridIsChanging = False End If End Set End Property Public Property HorizScrollValue() As Int32 Get Return Me.HorizScrollBar.Value End Get Set(ByVal Value As Int32) Me.HorizScrollBar.Value = Value End Set End Property Public Property VertScrollValue() As Int32 Get Return Me.VertScrollBar.Value End Get Set(ByVal Value As Int32) Me.VertScrollBar.Value = Value End Set End Property
Protected Overrides Sub GridHScrolled(ByVal sender As Object, ByVal se As System.Windows.Forms.ScrollEventArgs) If (Not _bScrollValueIsChanging) Then MyBase.GridHScrolled(sender, se) If (Not LinkedGrid Is Nothing) Then _dgLinkedGrid.HorizScrollValue = se.NewValue _bScrollValueIsChanging = True ' permet la resynchronisation du grid avec sa scrollbar _dgLinkedGrid.GridHScrolled(sender, se) _bScrollValueIsChanging = False End If End If End Sub
Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se As System.Windows.Forms.ScrollEventArgs) If (Not _bScrollValueIsChanging) Then MyBase.GridVScrolled(sender, se) If (Not LinkedGrid Is Nothing) Then _dgLinkedGrid.VertScrollValue = se.NewValue _bScrollValueIsChanging = True ' permet la resynchronisation du grid avec sa scrollbar _dgLinkedGrid.GridVScrolled(sender, se) _bScrollValueIsChanging = False End If End If End Sub
End Class '***
on l'utilise comme suit : '*** ' Classe Form1 (test la classe LinkableDataGrid) Option Explicit On
Imports System.Data Imports System.Data.SqlClient
Public Class Form1 Inherits System.Windows.Forms.Form
Private _dt As DataTable Friend WithEvents DataGrid1 As LinkableDataGrid Friend WithEvents DataGrid2 As LinkableDataGrid
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
InitGrids() InitDataSource() BindDataSource()
End Sub
Private Sub InitGrids()
Me.DataGrid1 = New LinkableDataGrid Me.DataGrid2 = New LinkableDataGrid
-- Cordialement Yanick MVP pour Visual Basic "Annie L." a écrit dans le message de news:
J'ai 2 datagrid côte à côte. Si je 'Scroll' un datagrid, j'aimerais que l'autre datagrid suive le scroll de l'autre. Comment faire? Merci de votre aide.