J'ai déjà 2 datagrid sur mon formulaire et ils ont leurs propres
'TableStyle' et leur 'data source'. Comment appliquer votre exemple!
J'ai déjà 2 datagrid sur mon formulaire et ils ont leurs propres
'TableStyle' et leur 'data source'. Comment appliquer votre exemple!
J'ai déjà 2 datagrid sur mon formulaire et ils ont leurs propres
'TableStyle' et leur 'data source'. Comment appliquer votre exemple!
Salut Annie! :O)
> J'ai déjà 2 datagrid sur mon formulaire et ils ont leurs propres
> 'TableStyle' et leur 'data source'. Comment appliquer votre exemple!
ça ne t'embete pas que je te tutoies ? Et je te pris de faire de même... ça
me fait vieillir sinon.. :O)
Si tu observes bien la déclaration de la classe LinkableDataGrid (que tu
peux renommer à ta guise en passant)
'***
Public Class LinkableDataGrid
Inherits DataGrid
' tout plein de code ici
End Class
'**
on voit quelle hérite de la classe DataGrid. Tu peux considéré que ton
LinkableDataGrid **EST** un DataGrid, elle offre les mêmes membres (dont
TableStyles et DataSource).
Donc tout ce dont tu as à faire, c'est de remplacer le type de tes DataGrids
actuels par LinkableDataGrid (dans la région de code généré par l'éditeur de
code).
Ex, dans le code tu as surement quelque chose comme ceci :
'***
#Region " Code généré par le Concepteur Windows Form "
' bla bla bla
Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
Friend WithEvents DataGrid2 As System.Windows.Forms.DataGrid
Private Sub InitializeComponent()
Me.DataGrid1 = New System.Windows.Forms.DataGrid
Me.DataGrid2 = New System.Windows.Forms.DataGrid
Me.SuspendLayout()
' bla bla bla
End Sub
' bla bla bla
#End Region
'***
Tu dois remplacer le type DataGrid par LinkableDataGrid :
'***
#Region " Code généré par le Concepteur Windows Form "
' bla bla bla
Friend WithEvents DataGrid1 As LinkableDataGrid
Friend WithEvents DataGrid2 As LinkableDataGrid
Private Sub InitializeComponent()
Me.DataGrid1 = New LinkableDataGrid
Me.DataGrid2 = New LinkableDataGrid
Me.SuspendLayout()
' bla bla bla
End Sub
' bla bla bla
#End Region
'***
et c'est tout. le code que tu avais devrait continuer fonctionner ...
--
Cordialement
Yanick
MVP pour Visual Basic
Salut Annie! :O)
> J'ai déjà 2 datagrid sur mon formulaire et ils ont leurs propres
> 'TableStyle' et leur 'data source'. Comment appliquer votre exemple!
ça ne t'embete pas que je te tutoies ? Et je te pris de faire de même... ça
me fait vieillir sinon.. :O)
Si tu observes bien la déclaration de la classe LinkableDataGrid (que tu
peux renommer à ta guise en passant)
'***
Public Class LinkableDataGrid
Inherits DataGrid
' tout plein de code ici
End Class
'**
on voit quelle hérite de la classe DataGrid. Tu peux considéré que ton
LinkableDataGrid **EST** un DataGrid, elle offre les mêmes membres (dont
TableStyles et DataSource).
Donc tout ce dont tu as à faire, c'est de remplacer le type de tes DataGrids
actuels par LinkableDataGrid (dans la région de code généré par l'éditeur de
code).
Ex, dans le code tu as surement quelque chose comme ceci :
'***
#Region " Code généré par le Concepteur Windows Form "
' bla bla bla
Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
Friend WithEvents DataGrid2 As System.Windows.Forms.DataGrid
Private Sub InitializeComponent()
Me.DataGrid1 = New System.Windows.Forms.DataGrid
Me.DataGrid2 = New System.Windows.Forms.DataGrid
Me.SuspendLayout()
' bla bla bla
End Sub
' bla bla bla
#End Region
'***
Tu dois remplacer le type DataGrid par LinkableDataGrid :
'***
#Region " Code généré par le Concepteur Windows Form "
' bla bla bla
Friend WithEvents DataGrid1 As LinkableDataGrid
Friend WithEvents DataGrid2 As LinkableDataGrid
Private Sub InitializeComponent()
Me.DataGrid1 = New LinkableDataGrid
Me.DataGrid2 = New LinkableDataGrid
Me.SuspendLayout()
' bla bla bla
End Sub
' bla bla bla
#End Region
'***
et c'est tout. le code que tu avais devrait continuer fonctionner ...
--
Cordialement
Yanick
MVP pour Visual Basic
Salut Annie! :O)
> J'ai déjà 2 datagrid sur mon formulaire et ils ont leurs propres
> 'TableStyle' et leur 'data source'. Comment appliquer votre exemple!
ça ne t'embete pas que je te tutoies ? Et je te pris de faire de même... ça
me fait vieillir sinon.. :O)
Si tu observes bien la déclaration de la classe LinkableDataGrid (que tu
peux renommer à ta guise en passant)
'***
Public Class LinkableDataGrid
Inherits DataGrid
' tout plein de code ici
End Class
'**
on voit quelle hérite de la classe DataGrid. Tu peux considéré que ton
LinkableDataGrid **EST** un DataGrid, elle offre les mêmes membres (dont
TableStyles et DataSource).
Donc tout ce dont tu as à faire, c'est de remplacer le type de tes DataGrids
actuels par LinkableDataGrid (dans la région de code généré par l'éditeur de
code).
Ex, dans le code tu as surement quelque chose comme ceci :
'***
#Region " Code généré par le Concepteur Windows Form "
' bla bla bla
Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid
Friend WithEvents DataGrid2 As System.Windows.Forms.DataGrid
Private Sub InitializeComponent()
Me.DataGrid1 = New System.Windows.Forms.DataGrid
Me.DataGrid2 = New System.Windows.Forms.DataGrid
Me.SuspendLayout()
' bla bla bla
End Sub
' bla bla bla
#End Region
'***
Tu dois remplacer le type DataGrid par LinkableDataGrid :
'***
#Region " Code généré par le Concepteur Windows Form "
' bla bla bla
Friend WithEvents DataGrid1 As LinkableDataGrid
Friend WithEvents DataGrid2 As LinkableDataGrid
Private Sub InitializeComponent()
Me.DataGrid1 = New LinkableDataGrid
Me.DataGrid2 = New LinkableDataGrid
Me.SuspendLayout()
' bla bla bla
End Sub
' bla bla bla
#End Region
'***
et c'est tout. le code que tu avais devrait continuer fonctionner ...
--
Cordialement
Yanick
MVP pour Visual Basic
'Me.dgdCarnetHeures.LinkedGrid = Nothing'
Un gros merci!
'Me.dgdCarnetHeures.LinkedGrid = Nothing'
Un gros merci!
'Me.dgdCarnetHeures.LinkedGrid = Nothing'
Un gros merci!
Salut Annie!
> 'Me.dgdCarnetHeures.LinkedGrid = Nothing'
oh! c'est normal... :O/
remplace la propriété LinkedGrid par ceci :
'***
Public Property LinkedGrid() As LinkableDataGrid
Get
Return _dgLinkedGrid
End Get
Set(ByVal Value As LinkableDataGrid)
' vérifie si une modifs est en cours
' si oui, on passe notre tour..
' cela évite la récursion infinie
' qui est causé par le fait que l'on modifie
' la propriété LinkedGrid de notre _dgLinkedGrid
' se qui déclancherait l'événement à nouveau...
If (Not _bLinkedGridIsChanging) Then
' vérifie la nouvelle valeur
' si elle est à Nothing, c'est que l'on veut délier les
grilles
' sinon, on branche les grilles ensembles..
If (Value Is Nothing) Then
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Nothing
_bLinkedGridIsChanging = False
_dgLinkedGrid = Nothing
ElseIf (Not _dgLinkedGrid Is Value) Then
_dgLinkedGrid = Value
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Me
_bLinkedGridIsChanging = False
_dgLinkedGrid.VertScrollValue = Me.VertScrollValue
_dgLinkedGrid.HorizScrollValue = Me.HorizScrollValue
End If
End If
End Set
End Property
'***
> Un gros merci!
fait plaisir! :O)
--
Cordialement
Yanick
MVP pour Visual Basic
Salut Annie!
> 'Me.dgdCarnetHeures.LinkedGrid = Nothing'
oh! c'est normal... :O/
remplace la propriété LinkedGrid par ceci :
'***
Public Property LinkedGrid() As LinkableDataGrid
Get
Return _dgLinkedGrid
End Get
Set(ByVal Value As LinkableDataGrid)
' vérifie si une modifs est en cours
' si oui, on passe notre tour..
' cela évite la récursion infinie
' qui est causé par le fait que l'on modifie
' la propriété LinkedGrid de notre _dgLinkedGrid
' se qui déclancherait l'événement à nouveau...
If (Not _bLinkedGridIsChanging) Then
' vérifie la nouvelle valeur
' si elle est à Nothing, c'est que l'on veut délier les
grilles
' sinon, on branche les grilles ensembles..
If (Value Is Nothing) Then
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Nothing
_bLinkedGridIsChanging = False
_dgLinkedGrid = Nothing
ElseIf (Not _dgLinkedGrid Is Value) Then
_dgLinkedGrid = Value
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Me
_bLinkedGridIsChanging = False
_dgLinkedGrid.VertScrollValue = Me.VertScrollValue
_dgLinkedGrid.HorizScrollValue = Me.HorizScrollValue
End If
End If
End Set
End Property
'***
> Un gros merci!
fait plaisir! :O)
--
Cordialement
Yanick
MVP pour Visual Basic
Salut Annie!
> 'Me.dgdCarnetHeures.LinkedGrid = Nothing'
oh! c'est normal... :O/
remplace la propriété LinkedGrid par ceci :
'***
Public Property LinkedGrid() As LinkableDataGrid
Get
Return _dgLinkedGrid
End Get
Set(ByVal Value As LinkableDataGrid)
' vérifie si une modifs est en cours
' si oui, on passe notre tour..
' cela évite la récursion infinie
' qui est causé par le fait que l'on modifie
' la propriété LinkedGrid de notre _dgLinkedGrid
' se qui déclancherait l'événement à nouveau...
If (Not _bLinkedGridIsChanging) Then
' vérifie la nouvelle valeur
' si elle est à Nothing, c'est que l'on veut délier les
grilles
' sinon, on branche les grilles ensembles..
If (Value Is Nothing) Then
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Nothing
_bLinkedGridIsChanging = False
_dgLinkedGrid = Nothing
ElseIf (Not _dgLinkedGrid Is Value) Then
_dgLinkedGrid = Value
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Me
_bLinkedGridIsChanging = False
_dgLinkedGrid.VertScrollValue = Me.VertScrollValue
_dgLinkedGrid.HorizScrollValue = Me.HorizScrollValue
End If
End If
End Set
End Property
'***
> Un gros merci!
fait plaisir! :O)
--
Cordialement
Yanick
MVP pour Visual Basic
> il me rajoute plus bas dans les propriétés de chaque Datagrid :
Me.dgdCarnetRV.LinkedGrid = Nothing
Me.dgdCarnetHeures.LinkedGrid = Nothing
> il me rajoute plus bas dans les propriétés de chaque Datagrid :
Me.dgdCarnetRV.LinkedGrid = Nothing
Me.dgdCarnetHeures.LinkedGrid = Nothing
> il me rajoute plus bas dans les propriétés de chaque Datagrid :
Me.dgdCarnetRV.LinkedGrid = Nothing
Me.dgdCarnetHeures.LinkedGrid = Nothing
> Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3 à 4
compilation, il me génère une erreur "La référence d'objet n'est pas
à une instance d'un objet"
J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le form.,
propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
la liste qui s'ouvre avec comme choix les 2 datagrid.
Je dois faire quelque chose de pas correct!!!!
> Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3 à 4
compilation, il me génère une erreur "La référence d'objet n'est pas
à une instance d'un objet"
J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le form.,
propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
la liste qui s'ouvre avec comme choix les 2 datagrid.
Je dois faire quelque chose de pas correct!!!!
> Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3 à 4
compilation, il me génère une erreur "La référence d'objet n'est pas
à une instance d'un objet"
J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le form.,
propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
la liste qui s'ouvre avec comme choix les 2 datagrid.
Je dois faire quelque chose de pas correct!!!!
> Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3 à 4
> compilation, il me génère une erreur "La référence d'objet n'est pas
définie
> à une instance d'un objet"
Le générateur de code a mit à jour sa section de code et a ajouté les lignes
suivantes :
'***
Me.dgdCarnetRV.LinkedGrid = Nothing
Me.dgdCarnetHeures.LinkedGrid = Nothing
'***
ce qui fesait planter le code.
> J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le form.,
la
> propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
dans
> la liste qui s'ouvre avec comme choix les 2 datagrid.
>
> Je dois faire quelque chose de pas correct!!!!
mmm.. ici je peux sélectionner les grilles. vérifie si, après la
modification proposée dans l'autre message, tu obtiens toujours le même
résultat. sinon on cherchera pourquoi.. :O)
--
Cordialement
Yanick
MVP pour Visual Basic
> Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3 à 4
> compilation, il me génère une erreur "La référence d'objet n'est pas
définie
> à une instance d'un objet"
Le générateur de code a mit à jour sa section de code et a ajouté les lignes
suivantes :
'***
Me.dgdCarnetRV.LinkedGrid = Nothing
Me.dgdCarnetHeures.LinkedGrid = Nothing
'***
ce qui fesait planter le code.
> J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le form.,
la
> propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
dans
> la liste qui s'ouvre avec comme choix les 2 datagrid.
>
> Je dois faire quelque chose de pas correct!!!!
mmm.. ici je peux sélectionner les grilles. vérifie si, après la
modification proposée dans l'autre message, tu obtiens toujours le même
résultat. sinon on cherchera pourquoi.. :O)
--
Cordialement
Yanick
MVP pour Visual Basic
> Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3 à 4
> compilation, il me génère une erreur "La référence d'objet n'est pas
définie
> à une instance d'un objet"
Le générateur de code a mit à jour sa section de code et a ajouté les lignes
suivantes :
'***
Me.dgdCarnetRV.LinkedGrid = Nothing
Me.dgdCarnetHeures.LinkedGrid = Nothing
'***
ce qui fesait planter le code.
> J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le form.,
la
> propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
dans
> la liste qui s'ouvre avec comme choix les 2 datagrid.
>
> Je dois faire quelque chose de pas correct!!!!
mmm.. ici je peux sélectionner les grilles. vérifie si, après la
modification proposée dans l'autre message, tu obtiens toujours le même
résultat. sinon on cherchera pourquoi.. :O)
--
Cordialement
Yanick
MVP pour Visual Basic
Ça fonctionne très bien!
Mais j'ai un autre problème que j'ai oublié de te parler!
Ce que j,essaie de faire, est un peu comme dans Excel. Geler une colonne
(ex.: dans datagrid_heures = seulement les heures de rendez-vous. Dans
datagrid_rendez-vous = chaque colonne est égale à un employé, donc
colonnes.)
Jusqu'à date cela fonctionne très bien.
Mais lorsque je fais défiler le 'scroll' du bas (horiz.), il ne faut pas
qu'il fasse défiler l'autre datagrid (heures). Présentement, c'est ce
fait et cela 'plante' le programme. Il faudrait 'désactiver' le scroll du
bas. J'ai essayé de mettre en commentaires la propriété de ce 'scroll' et
cela me génère des erreurs avant la compilation!
Que me suggère-tu? Merci! on approche du but recherché!
"Zoury" wrote:
> > Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3
> > compilation, il me génère une erreur "La référence d'objet n'est pas
> définie
> > à une instance d'un objet"
>
>
> Le générateur de code a mit à jour sa section de code et a ajouté les
> suivantes :
> '***
> Me.dgdCarnetRV.LinkedGrid = Nothing
> Me.dgdCarnetHeures.LinkedGrid = Nothing
> '***
> ce qui fesait planter le code.
>
>
>
> > J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le
> la
> > propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
> dans
> > la liste qui s'ouvre avec comme choix les 2 datagrid.
> >
> > Je dois faire quelque chose de pas correct!!!!
>
> mmm.. ici je peux sélectionner les grilles. vérifie si, après la
> modification proposée dans l'autre message, tu obtiens toujours le même
> résultat. sinon on cherchera pourquoi.. :O)
>
>
> --
> Cordialement
> Yanick
> MVP pour Visual Basic
>
>
>
Ça fonctionne très bien!
Mais j'ai un autre problème que j'ai oublié de te parler!
Ce que j,essaie de faire, est un peu comme dans Excel. Geler une colonne
(ex.: dans datagrid_heures = seulement les heures de rendez-vous. Dans
datagrid_rendez-vous = chaque colonne est égale à un employé, donc
colonnes.)
Jusqu'à date cela fonctionne très bien.
Mais lorsque je fais défiler le 'scroll' du bas (horiz.), il ne faut pas
qu'il fasse défiler l'autre datagrid (heures). Présentement, c'est ce
fait et cela 'plante' le programme. Il faudrait 'désactiver' le scroll du
bas. J'ai essayé de mettre en commentaires la propriété de ce 'scroll' et
cela me génère des erreurs avant la compilation!
Que me suggère-tu? Merci! on approche du but recherché!
"Zoury" wrote:
> > Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3
> > compilation, il me génère une erreur "La référence d'objet n'est pas
> définie
> > à une instance d'un objet"
>
>
> Le générateur de code a mit à jour sa section de code et a ajouté les
> suivantes :
> '***
> Me.dgdCarnetRV.LinkedGrid = Nothing
> Me.dgdCarnetHeures.LinkedGrid = Nothing
> '***
> ce qui fesait planter le code.
>
>
>
> > J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le
> la
> > propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
> dans
> > la liste qui s'ouvre avec comme choix les 2 datagrid.
> >
> > Je dois faire quelque chose de pas correct!!!!
>
> mmm.. ici je peux sélectionner les grilles. vérifie si, après la
> modification proposée dans l'autre message, tu obtiens toujours le même
> résultat. sinon on cherchera pourquoi.. :O)
>
>
> --
> Cordialement
> Yanick
> MVP pour Visual Basic
>
>
>
Ça fonctionne très bien!
Mais j'ai un autre problème que j'ai oublié de te parler!
Ce que j,essaie de faire, est un peu comme dans Excel. Geler une colonne
(ex.: dans datagrid_heures = seulement les heures de rendez-vous. Dans
datagrid_rendez-vous = chaque colonne est égale à un employé, donc
colonnes.)
Jusqu'à date cela fonctionne très bien.
Mais lorsque je fais défiler le 'scroll' du bas (horiz.), il ne faut pas
qu'il fasse défiler l'autre datagrid (heures). Présentement, c'est ce
fait et cela 'plante' le programme. Il faudrait 'désactiver' le scroll du
bas. J'ai essayé de mettre en commentaires la propriété de ce 'scroll' et
cela me génère des erreurs avant la compilation!
Que me suggère-tu? Merci! on approche du but recherché!
"Zoury" wrote:
> > Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3
> > compilation, il me génère une erreur "La référence d'objet n'est pas
> définie
> > à une instance d'un objet"
>
>
> Le générateur de code a mit à jour sa section de code et a ajouté les
> suivantes :
> '***
> Me.dgdCarnetRV.LinkedGrid = Nothing
> Me.dgdCarnetHeures.LinkedGrid = Nothing
> '***
> ce qui fesait planter le code.
>
>
>
> > J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le
> la
> > propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
> dans
> > la liste qui s'ouvre avec comme choix les 2 datagrid.
> >
> > Je dois faire quelque chose de pas correct!!!!
>
> mmm.. ici je peux sélectionner les grilles. vérifie si, après la
> modification proposée dans l'autre message, tu obtiens toujours le même
> résultat. sinon on cherchera pourquoi.. :O)
>
>
> --
> Cordialement
> Yanick
> MVP pour Visual Basic
>
>
>
Salut Annie!
essai cette classe, c'est l'autre modifié un peu, j'y ai ajouté une
propriété nommé ScrollMode qui te permet de sélectionner laquelle(s) des
barres de défilement sera "linker" avec l'autre grid. :
'***
Option Explicit On
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports System.ComponentModel
<Flags()> _
Public Enum ScrollModes
NotSet = 0
Horizontal = 1
Vertical = 2
Both = 3
End Enum
Public Class LinkableDataGrid
Inherits DataGrid
' attributs
Private _eScrollMode As ScrollModes
Private _dgLinkedGrid As LinkableDataGrid
' variables
Private _bLinkedGridIsChanging As Boolean
Private _bScrollModeIsChanging As Boolean
Private _bIgnoreGridLinkedEvent As Boolean
<DefaultValue(ScrollModes.NotSet)> _
Public Property ScrollMode() As ScrollModes
Get
Return _eScrollMode
End Get
Set(ByVal Value As ScrollModes)
If ((Not _bScrollModeIsChanging) And (Not
_bLinkedGridIsChanging)) Then
_eScrollMode = Value
If (Not _dgLinkedGrid Is Nothing) Then
_bScrollModeIsChanging = True
_dgLinkedGrid.ScrollMode = Value
_bScrollModeIsChanging = False
End If
End If
End Set
End Property
Public Property LinkedGrid() As LinkableDataGrid
Get
Return _dgLinkedGrid
End Get
Set(ByVal Value As LinkableDataGrid)
' vérifie si une modifs est en cours
' si oui, on passe notre tour..
' cela évite la récursion infinie
' qui est causé par le fait que l'on modifie
' la propriété LinkedGrid de notre _dgLinkedGrid
' se qui déclancherait l'événement à nouveau...
If ((Not _bScrollModeIsChanging) And (Not
_bLinkedGridIsChanging)) Then
' vérifie la nouvelle valeur
' si elle est à Nothing, c'est que l'on veut délier les
grilles
' sinon, on branche les grilles ensembles..
If ((Value Is Nothing) And (Not _dgLinkedGrid Is Nothing))
Then
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Nothing
_bLinkedGridIsChanging = False
_dgLinkedGrid = Nothing
ElseIf (Not _dgLinkedGrid Is Value) Then
_dgLinkedGrid = Value
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Me
_bLinkedGridIsChanging = False
_dgLinkedGrid.HorizScrollValue = Me.HorizScrollValue
_dgLinkedGrid.VertScrollValue = Me.VertScrollValue
_dgLinkedGrid.ScrollMode = _eScrollMode
End If
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 _bIgnoreGridLinkedEvent) Then
MyBase.GridHScrolled(sender, se)
If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
ScrollModes.Horizontal) = ScrollModes.Horizontal)) Then
_dgLinkedGrid.HorizScrollValue = se.NewValue
_bIgnoreGridLinkedEvent = True
_dgLinkedGrid.GridHScrolled(sender, se)
_bIgnoreGridLinkedEvent = False
End If
End If
End Sub
Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se
As System.Windows.Forms.ScrollEventArgs)
If (Not _bIgnoreGridLinkedEvent) Then
MyBase.GridVScrolled(sender, se)
If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
ScrollModes.Vertical) = ScrollModes.Vertical)) Then
_dgLinkedGrid.VertScrollValue = se.NewValue
_bIgnoreGridLinkedEvent = True
_dgLinkedGrid.GridVScrolled(sender, se)
_bIgnoreGridLinkedEvent = False
End If
End If
End Sub
End Class
'***
dans ton cas (tu ne veux pas du scroll du bas), utilise ScrollModes.Vertical
:O)
--
Cordialement
Yanick
MVP pour Visual Basic
"Annie L." a écrit dans le message de
news:
> Ça fonctionne très bien!
> Mais j'ai un autre problème que j'ai oublié de te parler!
> Ce que j,essaie de faire, est un peu comme dans Excel. Geler une colonne
> (ex.: dans datagrid_heures = seulement les heures de rendez-vous. Dans
> datagrid_rendez-vous = chaque colonne est égale à un employé, donc
plusieurs
> colonnes.)
> Jusqu'à date cela fonctionne très bien.
> Mais lorsque je fais défiler le 'scroll' du bas (horiz.), il ne faut pas
> qu'il fasse défiler l'autre datagrid (heures). Présentement, c'est ce
qu'il
> fait et cela 'plante' le programme. Il faudrait 'désactiver' le scroll du
> bas. J'ai essayé de mettre en commentaires la propriété de ce 'scroll' et
là
> cela me génère des erreurs avant la compilation!
>
> Que me suggère-tu? Merci! on approche du but recherché!
>
> "Zoury" wrote:
>
> > > Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3
à 4
> > > compilation, il me génère une erreur "La référence d'objet n'est pas
> > définie
> > > à une instance d'un objet"
> >
> >
> > Le générateur de code a mit à jour sa section de code et a ajouté les
lignes
> > suivantes :
> > '***
> > Me.dgdCarnetRV.LinkedGrid = Nothing
> > Me.dgdCarnetHeures.LinkedGrid = Nothing
> > '***
> > ce qui fesait planter le code.
> >
> >
> >
> > > J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le
form.,
> > la
> > > propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
> > dans
> > > la liste qui s'ouvre avec comme choix les 2 datagrid.
> > >
> > > Je dois faire quelque chose de pas correct!!!!
> >
> > mmm.. ici je peux sélectionner les grilles. vérifie si, après la
> > modification proposée dans l'autre message, tu obtiens toujours le même
> > résultat. sinon on cherchera pourquoi.. :O)
> >
> >
> > --
> > Cordialement
> > Yanick
> > MVP pour Visual Basic
> >
> >
> >
Salut Annie!
essai cette classe, c'est l'autre modifié un peu, j'y ai ajouté une
propriété nommé ScrollMode qui te permet de sélectionner laquelle(s) des
barres de défilement sera "linker" avec l'autre grid. :
'***
Option Explicit On
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports System.ComponentModel
<Flags()> _
Public Enum ScrollModes
NotSet = 0
Horizontal = 1
Vertical = 2
Both = 3
End Enum
Public Class LinkableDataGrid
Inherits DataGrid
' attributs
Private _eScrollMode As ScrollModes
Private _dgLinkedGrid As LinkableDataGrid
' variables
Private _bLinkedGridIsChanging As Boolean
Private _bScrollModeIsChanging As Boolean
Private _bIgnoreGridLinkedEvent As Boolean
<DefaultValue(ScrollModes.NotSet)> _
Public Property ScrollMode() As ScrollModes
Get
Return _eScrollMode
End Get
Set(ByVal Value As ScrollModes)
If ((Not _bScrollModeIsChanging) And (Not
_bLinkedGridIsChanging)) Then
_eScrollMode = Value
If (Not _dgLinkedGrid Is Nothing) Then
_bScrollModeIsChanging = True
_dgLinkedGrid.ScrollMode = Value
_bScrollModeIsChanging = False
End If
End If
End Set
End Property
Public Property LinkedGrid() As LinkableDataGrid
Get
Return _dgLinkedGrid
End Get
Set(ByVal Value As LinkableDataGrid)
' vérifie si une modifs est en cours
' si oui, on passe notre tour..
' cela évite la récursion infinie
' qui est causé par le fait que l'on modifie
' la propriété LinkedGrid de notre _dgLinkedGrid
' se qui déclancherait l'événement à nouveau...
If ((Not _bScrollModeIsChanging) And (Not
_bLinkedGridIsChanging)) Then
' vérifie la nouvelle valeur
' si elle est à Nothing, c'est que l'on veut délier les
grilles
' sinon, on branche les grilles ensembles..
If ((Value Is Nothing) And (Not _dgLinkedGrid Is Nothing))
Then
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Nothing
_bLinkedGridIsChanging = False
_dgLinkedGrid = Nothing
ElseIf (Not _dgLinkedGrid Is Value) Then
_dgLinkedGrid = Value
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Me
_bLinkedGridIsChanging = False
_dgLinkedGrid.HorizScrollValue = Me.HorizScrollValue
_dgLinkedGrid.VertScrollValue = Me.VertScrollValue
_dgLinkedGrid.ScrollMode = _eScrollMode
End If
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 _bIgnoreGridLinkedEvent) Then
MyBase.GridHScrolled(sender, se)
If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
ScrollModes.Horizontal) = ScrollModes.Horizontal)) Then
_dgLinkedGrid.HorizScrollValue = se.NewValue
_bIgnoreGridLinkedEvent = True
_dgLinkedGrid.GridHScrolled(sender, se)
_bIgnoreGridLinkedEvent = False
End If
End If
End Sub
Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se
As System.Windows.Forms.ScrollEventArgs)
If (Not _bIgnoreGridLinkedEvent) Then
MyBase.GridVScrolled(sender, se)
If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
ScrollModes.Vertical) = ScrollModes.Vertical)) Then
_dgLinkedGrid.VertScrollValue = se.NewValue
_bIgnoreGridLinkedEvent = True
_dgLinkedGrid.GridVScrolled(sender, se)
_bIgnoreGridLinkedEvent = False
End If
End If
End Sub
End Class
'***
dans ton cas (tu ne veux pas du scroll du bas), utilise ScrollModes.Vertical
:O)
--
Cordialement
Yanick
MVP pour Visual Basic
"Annie L." <AnnieL@discussions.microsoft.com> a écrit dans le message de
news:C5019607-98DA-4BFA-B503-D926AC14B3E1@microsoft.com...
> Ça fonctionne très bien!
> Mais j'ai un autre problème que j'ai oublié de te parler!
> Ce que j,essaie de faire, est un peu comme dans Excel. Geler une colonne
> (ex.: dans datagrid_heures = seulement les heures de rendez-vous. Dans
> datagrid_rendez-vous = chaque colonne est égale à un employé, donc
plusieurs
> colonnes.)
> Jusqu'à date cela fonctionne très bien.
> Mais lorsque je fais défiler le 'scroll' du bas (horiz.), il ne faut pas
> qu'il fasse défiler l'autre datagrid (heures). Présentement, c'est ce
qu'il
> fait et cela 'plante' le programme. Il faudrait 'désactiver' le scroll du
> bas. J'ai essayé de mettre en commentaires la propriété de ce 'scroll' et
là
> cela me génère des erreurs avant la compilation!
>
> Que me suggère-tu? Merci! on approche du but recherché!
>
> "Zoury" wrote:
>
> > > Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3
à 4
> > > compilation, il me génère une erreur "La référence d'objet n'est pas
> > définie
> > > à une instance d'un objet"
> >
> >
> > Le générateur de code a mit à jour sa section de code et a ajouté les
lignes
> > suivantes :
> > '***
> > Me.dgdCarnetRV.LinkedGrid = Nothing
> > Me.dgdCarnetHeures.LinkedGrid = Nothing
> > '***
> > ce qui fesait planter le code.
> >
> >
> >
> > > J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le
form.,
> > la
> > > propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
> > dans
> > > la liste qui s'ouvre avec comme choix les 2 datagrid.
> > >
> > > Je dois faire quelque chose de pas correct!!!!
> >
> > mmm.. ici je peux sélectionner les grilles. vérifie si, après la
> > modification proposée dans l'autre message, tu obtiens toujours le même
> > résultat. sinon on cherchera pourquoi.. :O)
> >
> >
> > --
> > Cordialement
> > Yanick
> > MVP pour Visual Basic
> >
> >
> >
Salut Annie!
essai cette classe, c'est l'autre modifié un peu, j'y ai ajouté une
propriété nommé ScrollMode qui te permet de sélectionner laquelle(s) des
barres de défilement sera "linker" avec l'autre grid. :
'***
Option Explicit On
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports System.ComponentModel
<Flags()> _
Public Enum ScrollModes
NotSet = 0
Horizontal = 1
Vertical = 2
Both = 3
End Enum
Public Class LinkableDataGrid
Inherits DataGrid
' attributs
Private _eScrollMode As ScrollModes
Private _dgLinkedGrid As LinkableDataGrid
' variables
Private _bLinkedGridIsChanging As Boolean
Private _bScrollModeIsChanging As Boolean
Private _bIgnoreGridLinkedEvent As Boolean
<DefaultValue(ScrollModes.NotSet)> _
Public Property ScrollMode() As ScrollModes
Get
Return _eScrollMode
End Get
Set(ByVal Value As ScrollModes)
If ((Not _bScrollModeIsChanging) And (Not
_bLinkedGridIsChanging)) Then
_eScrollMode = Value
If (Not _dgLinkedGrid Is Nothing) Then
_bScrollModeIsChanging = True
_dgLinkedGrid.ScrollMode = Value
_bScrollModeIsChanging = False
End If
End If
End Set
End Property
Public Property LinkedGrid() As LinkableDataGrid
Get
Return _dgLinkedGrid
End Get
Set(ByVal Value As LinkableDataGrid)
' vérifie si une modifs est en cours
' si oui, on passe notre tour..
' cela évite la récursion infinie
' qui est causé par le fait que l'on modifie
' la propriété LinkedGrid de notre _dgLinkedGrid
' se qui déclancherait l'événement à nouveau...
If ((Not _bScrollModeIsChanging) And (Not
_bLinkedGridIsChanging)) Then
' vérifie la nouvelle valeur
' si elle est à Nothing, c'est que l'on veut délier les
grilles
' sinon, on branche les grilles ensembles..
If ((Value Is Nothing) And (Not _dgLinkedGrid Is Nothing))
Then
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Nothing
_bLinkedGridIsChanging = False
_dgLinkedGrid = Nothing
ElseIf (Not _dgLinkedGrid Is Value) Then
_dgLinkedGrid = Value
_bLinkedGridIsChanging = True
_dgLinkedGrid.LinkedGrid = Me
_bLinkedGridIsChanging = False
_dgLinkedGrid.HorizScrollValue = Me.HorizScrollValue
_dgLinkedGrid.VertScrollValue = Me.VertScrollValue
_dgLinkedGrid.ScrollMode = _eScrollMode
End If
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 _bIgnoreGridLinkedEvent) Then
MyBase.GridHScrolled(sender, se)
If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
ScrollModes.Horizontal) = ScrollModes.Horizontal)) Then
_dgLinkedGrid.HorizScrollValue = se.NewValue
_bIgnoreGridLinkedEvent = True
_dgLinkedGrid.GridHScrolled(sender, se)
_bIgnoreGridLinkedEvent = False
End If
End If
End Sub
Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se
As System.Windows.Forms.ScrollEventArgs)
If (Not _bIgnoreGridLinkedEvent) Then
MyBase.GridVScrolled(sender, se)
If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
ScrollModes.Vertical) = ScrollModes.Vertical)) Then
_dgLinkedGrid.VertScrollValue = se.NewValue
_bIgnoreGridLinkedEvent = True
_dgLinkedGrid.GridVScrolled(sender, se)
_bIgnoreGridLinkedEvent = False
End If
End If
End Sub
End Class
'***
dans ton cas (tu ne veux pas du scroll du bas), utilise ScrollModes.Vertical
:O)
--
Cordialement
Yanick
MVP pour Visual Basic
"Annie L." a écrit dans le message de
news:
> Ça fonctionne très bien!
> Mais j'ai un autre problème que j'ai oublié de te parler!
> Ce que j,essaie de faire, est un peu comme dans Excel. Geler une colonne
> (ex.: dans datagrid_heures = seulement les heures de rendez-vous. Dans
> datagrid_rendez-vous = chaque colonne est égale à un employé, donc
plusieurs
> colonnes.)
> Jusqu'à date cela fonctionne très bien.
> Mais lorsque je fais défiler le 'scroll' du bas (horiz.), il ne faut pas
> qu'il fasse défiler l'autre datagrid (heures). Présentement, c'est ce
qu'il
> fait et cela 'plante' le programme. Il faudrait 'désactiver' le scroll du
> bas. J'ai essayé de mettre en commentaires la propriété de ce 'scroll' et
là
> cela me génère des erreurs avant la compilation!
>
> Que me suggère-tu? Merci! on approche du but recherché!
>
> "Zoury" wrote:
>
> > > Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3
à 4
> > > compilation, il me génère une erreur "La référence d'objet n'est pas
> > définie
> > > à une instance d'un objet"
> >
> >
> > Le générateur de code a mit à jour sa section de code et a ajouté les
lignes
> > suivantes :
> > '***
> > Me.dgdCarnetRV.LinkedGrid = Nothing
> > Me.dgdCarnetHeures.LinkedGrid = Nothing
> > '***
> > ce qui fesait planter le code.
> >
> >
> >
> > > J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le
form.,
> > la
> > > propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
> > dans
> > > la liste qui s'ouvre avec comme choix les 2 datagrid.
> > >
> > > Je dois faire quelque chose de pas correct!!!!
> >
> > mmm.. ici je peux sélectionner les grilles. vérifie si, après la
> > modification proposée dans l'autre message, tu obtiens toujours le même
> > résultat. sinon on cherchera pourquoi.. :O)
> >
> >
> > --
> > Cordialement
> > Yanick
> > MVP pour Visual Basic
> >
> >
> >
Bonjour!!!
Wow! super! mais je ne saisie pas le "scrollModes". Présentement j'ai 2
nouvelles propriétés 'HorizScrollValue' et 'VertScrollValue' qui ont comme
valeur "0". Si je change ces propriétés soit à "1" ou "2", j'obtient un
message me disant que la valeur saisie n'est pas correcte.
En Éxécutant mon application, le 'scroll' du bas n'affecte pas l'autre
datagrid. C'est parfait, mais complexe comme programmation!!!
Mais le 'scroll' vertical ne fonctionne pas. J'aimerais savoir comment
appliquer le 'ScrollModes'.
Autre chose que j'ai remarqué hier! Quand je 'scroll' verticalement, cela
fonctionne très bien. Mais je n'arrive pas à pouvoir cliquer sur ma dernière
ligne et si j'arrive à cliquer sur la fraction de ligne que je vois, il
bousille les coordonnées de ma ligne à cause du 'scroll' du bas qui cache au
3/4 ma ligne parce que j'ai plusieurs colonnes. Mais si j'ai 3 à 4 colonnes
par exemple, tout est correct car il n'y a pas de 'scroll' dans le bas. Je
trouverai bien une solution! Tu m'as apportée une aide incroyable et je t'en
remercie grandement et j'espère que d'autres programmeurs auront suivi le
déroulement de cette fonctionnalité et qui servira à développer d'autres
classes.
Ce sont des exemples que nous ne retrouvons pas dans des livres (et j'en ai
plusieurs)!
Cela faisait plus d'un mois que je renvoyait mon 'Post' sur le site et enfin
une réponse.
Encore mille fois Merci!!!
"Zoury" wrote:
> Salut Annie!
>
> essai cette classe, c'est l'autre modifié un peu, j'y ai ajouté une
> propriété nommé ScrollMode qui te permet de sélectionner laquelle(s) des
> barres de défilement sera "linker" avec l'autre grid. :
> '***
> Option Explicit On
>
> Imports System.Runtime.InteropServices
> Imports System.Windows.Forms
> Imports System.ComponentModel
>
> <Flags()> _
> Public Enum ScrollModes
> NotSet = 0
> Horizontal = 1
> Vertical = 2
> Both = 3
> End Enum
>
> Public Class LinkableDataGrid
> Inherits DataGrid
>
> ' attributs
> Private _eScrollMode As ScrollModes
> Private _dgLinkedGrid As LinkableDataGrid
>
> ' variables
> Private _bLinkedGridIsChanging As Boolean
> Private _bScrollModeIsChanging As Boolean
> Private _bIgnoreGridLinkedEvent As Boolean
>
> <DefaultValue(ScrollModes.NotSet)> _
> Public Property ScrollMode() As ScrollModes
> Get
> Return _eScrollMode
> End Get
> Set(ByVal Value As ScrollModes)
> If ((Not _bScrollModeIsChanging) And (Not
> _bLinkedGridIsChanging)) Then
> _eScrollMode = Value
> If (Not _dgLinkedGrid Is Nothing) Then
> _bScrollModeIsChanging = True
> _dgLinkedGrid.ScrollMode = Value
> _bScrollModeIsChanging = False
> End If
> End If
> End Set
> End Property
> Public Property LinkedGrid() As LinkableDataGrid
> Get
> Return _dgLinkedGrid
> End Get
> Set(ByVal Value As LinkableDataGrid)
>
> ' vérifie si une modifs est en cours
> ' si oui, on passe notre tour..
> ' cela évite la récursion infinie
> ' qui est causé par le fait que l'on modifie
> ' la propriété LinkedGrid de notre _dgLinkedGrid
> ' se qui déclancherait l'événement à nouveau...
> If ((Not _bScrollModeIsChanging) And (Not
> _bLinkedGridIsChanging)) Then
>
> ' vérifie la nouvelle valeur
> ' si elle est à Nothing, c'est que l'on veut délier les
> grilles
> ' sinon, on branche les grilles ensembles..
> If ((Value Is Nothing) And (Not _dgLinkedGrid Is Nothing))
> Then
> _bLinkedGridIsChanging = True
> _dgLinkedGrid.LinkedGrid = Nothing
> _bLinkedGridIsChanging = False
> _dgLinkedGrid = Nothing
> ElseIf (Not _dgLinkedGrid Is Value) Then
> _dgLinkedGrid = Value
> _bLinkedGridIsChanging = True
> _dgLinkedGrid.LinkedGrid = Me
> _bLinkedGridIsChanging = False
> _dgLinkedGrid.HorizScrollValue = Me.HorizScrollValue
> _dgLinkedGrid.VertScrollValue = Me.VertScrollValue
> _dgLinkedGrid.ScrollMode = _eScrollMode
> End If
>
> 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 _bIgnoreGridLinkedEvent) Then
> MyBase.GridHScrolled(sender, se)
> If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
> ScrollModes.Horizontal) = ScrollModes.Horizontal)) Then
> _dgLinkedGrid.HorizScrollValue = se.NewValue
> _bIgnoreGridLinkedEvent = True
> _dgLinkedGrid.GridHScrolled(sender, se)
> _bIgnoreGridLinkedEvent = False
> End If
> End If
> End Sub
> Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se
> As System.Windows.Forms.ScrollEventArgs)
> If (Not _bIgnoreGridLinkedEvent) Then
> MyBase.GridVScrolled(sender, se)
> If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
> ScrollModes.Vertical) = ScrollModes.Vertical)) Then
> _dgLinkedGrid.VertScrollValue = se.NewValue
> _bIgnoreGridLinkedEvent = True
> _dgLinkedGrid.GridVScrolled(sender, se)
> _bIgnoreGridLinkedEvent = False
> End If
> End If
> End Sub
>
> End Class
> '***
>
> dans ton cas (tu ne veux pas du scroll du bas), utilise ScrollModes.Vertical
> :O)
>
> --
> Cordialement
> Yanick
> MVP pour Visual Basic
> "Annie L." a écrit dans le message de
> news:
> > Ça fonctionne très bien!
> > Mais j'ai un autre problème que j'ai oublié de te parler!
> > Ce que j,essaie de faire, est un peu comme dans Excel. Geler une colonne
> > (ex.: dans datagrid_heures = seulement les heures de rendez-vous. Dans
> > datagrid_rendez-vous = chaque colonne est égale à un employé, donc
> plusieurs
> > colonnes.)
> > Jusqu'à date cela fonctionne très bien.
> > Mais lorsque je fais défiler le 'scroll' du bas (horiz.), il ne faut pas
> > qu'il fasse défiler l'autre datagrid (heures). Présentement, c'est ce
> qu'il
> > fait et cela 'plante' le programme. Il faudrait 'désactiver' le scroll du
> > bas. J'ai essayé de mettre en commentaires la propriété de ce 'scroll' et
> là
> > cela me génère des erreurs avant la compilation!
> >
> > Que me suggère-tu? Merci! on approche du but recherché!
> >
> > "Zoury" wrote:
> >
> > > > Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3
> à 4
> > > > compilation, il me génère une erreur "La référence d'objet n'est pas
> > > définie
> > > > à une instance d'un objet"
> > >
> > >
> > > Le générateur de code a mit à jour sa section de code et a ajouté les
> lignes
> > > suivantes :
> > > '***
> > > Me.dgdCarnetRV.LinkedGrid = Nothing
> > > Me.dgdCarnetHeures.LinkedGrid = Nothing
> > > '***
> > > ce qui fesait planter le code.
> > >
> > >
> > >
> > > > J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le
> form.,
> > > la
> > > > propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
> > > dans
> > > > la liste qui s'ouvre avec comme choix les 2 datagrid.
> > > >
> > > > Je dois faire quelque chose de pas correct!!!!
> > >
> > > mmm.. ici je peux sélectionner les grilles. vérifie si, après la
> > > modification proposée dans l'autre message, tu obtiens toujours le même
> > > résultat. sinon on cherchera pourquoi.. :O)
> > >
> > >
> > > --
> > > Cordialement
> > > Yanick
> > > MVP pour Visual Basic
> > >
> > >
> > >
>
>
>
Bonjour!!!
Wow! super! mais je ne saisie pas le "scrollModes". Présentement j'ai 2
nouvelles propriétés 'HorizScrollValue' et 'VertScrollValue' qui ont comme
valeur "0". Si je change ces propriétés soit à "1" ou "2", j'obtient un
message me disant que la valeur saisie n'est pas correcte.
En Éxécutant mon application, le 'scroll' du bas n'affecte pas l'autre
datagrid. C'est parfait, mais complexe comme programmation!!!
Mais le 'scroll' vertical ne fonctionne pas. J'aimerais savoir comment
appliquer le 'ScrollModes'.
Autre chose que j'ai remarqué hier! Quand je 'scroll' verticalement, cela
fonctionne très bien. Mais je n'arrive pas à pouvoir cliquer sur ma dernière
ligne et si j'arrive à cliquer sur la fraction de ligne que je vois, il
bousille les coordonnées de ma ligne à cause du 'scroll' du bas qui cache au
3/4 ma ligne parce que j'ai plusieurs colonnes. Mais si j'ai 3 à 4 colonnes
par exemple, tout est correct car il n'y a pas de 'scroll' dans le bas. Je
trouverai bien une solution! Tu m'as apportée une aide incroyable et je t'en
remercie grandement et j'espère que d'autres programmeurs auront suivi le
déroulement de cette fonctionnalité et qui servira à développer d'autres
classes.
Ce sont des exemples que nous ne retrouvons pas dans des livres (et j'en ai
plusieurs)!
Cela faisait plus d'un mois que je renvoyait mon 'Post' sur le site et enfin
une réponse.
Encore mille fois Merci!!!
"Zoury" wrote:
> Salut Annie!
>
> essai cette classe, c'est l'autre modifié un peu, j'y ai ajouté une
> propriété nommé ScrollMode qui te permet de sélectionner laquelle(s) des
> barres de défilement sera "linker" avec l'autre grid. :
> '***
> Option Explicit On
>
> Imports System.Runtime.InteropServices
> Imports System.Windows.Forms
> Imports System.ComponentModel
>
> <Flags()> _
> Public Enum ScrollModes
> NotSet = 0
> Horizontal = 1
> Vertical = 2
> Both = 3
> End Enum
>
> Public Class LinkableDataGrid
> Inherits DataGrid
>
> ' attributs
> Private _eScrollMode As ScrollModes
> Private _dgLinkedGrid As LinkableDataGrid
>
> ' variables
> Private _bLinkedGridIsChanging As Boolean
> Private _bScrollModeIsChanging As Boolean
> Private _bIgnoreGridLinkedEvent As Boolean
>
> <DefaultValue(ScrollModes.NotSet)> _
> Public Property ScrollMode() As ScrollModes
> Get
> Return _eScrollMode
> End Get
> Set(ByVal Value As ScrollModes)
> If ((Not _bScrollModeIsChanging) And (Not
> _bLinkedGridIsChanging)) Then
> _eScrollMode = Value
> If (Not _dgLinkedGrid Is Nothing) Then
> _bScrollModeIsChanging = True
> _dgLinkedGrid.ScrollMode = Value
> _bScrollModeIsChanging = False
> End If
> End If
> End Set
> End Property
> Public Property LinkedGrid() As LinkableDataGrid
> Get
> Return _dgLinkedGrid
> End Get
> Set(ByVal Value As LinkableDataGrid)
>
> ' vérifie si une modifs est en cours
> ' si oui, on passe notre tour..
> ' cela évite la récursion infinie
> ' qui est causé par le fait que l'on modifie
> ' la propriété LinkedGrid de notre _dgLinkedGrid
> ' se qui déclancherait l'événement à nouveau...
> If ((Not _bScrollModeIsChanging) And (Not
> _bLinkedGridIsChanging)) Then
>
> ' vérifie la nouvelle valeur
> ' si elle est à Nothing, c'est que l'on veut délier les
> grilles
> ' sinon, on branche les grilles ensembles..
> If ((Value Is Nothing) And (Not _dgLinkedGrid Is Nothing))
> Then
> _bLinkedGridIsChanging = True
> _dgLinkedGrid.LinkedGrid = Nothing
> _bLinkedGridIsChanging = False
> _dgLinkedGrid = Nothing
> ElseIf (Not _dgLinkedGrid Is Value) Then
> _dgLinkedGrid = Value
> _bLinkedGridIsChanging = True
> _dgLinkedGrid.LinkedGrid = Me
> _bLinkedGridIsChanging = False
> _dgLinkedGrid.HorizScrollValue = Me.HorizScrollValue
> _dgLinkedGrid.VertScrollValue = Me.VertScrollValue
> _dgLinkedGrid.ScrollMode = _eScrollMode
> End If
>
> 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 _bIgnoreGridLinkedEvent) Then
> MyBase.GridHScrolled(sender, se)
> If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
> ScrollModes.Horizontal) = ScrollModes.Horizontal)) Then
> _dgLinkedGrid.HorizScrollValue = se.NewValue
> _bIgnoreGridLinkedEvent = True
> _dgLinkedGrid.GridHScrolled(sender, se)
> _bIgnoreGridLinkedEvent = False
> End If
> End If
> End Sub
> Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se
> As System.Windows.Forms.ScrollEventArgs)
> If (Not _bIgnoreGridLinkedEvent) Then
> MyBase.GridVScrolled(sender, se)
> If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
> ScrollModes.Vertical) = ScrollModes.Vertical)) Then
> _dgLinkedGrid.VertScrollValue = se.NewValue
> _bIgnoreGridLinkedEvent = True
> _dgLinkedGrid.GridVScrolled(sender, se)
> _bIgnoreGridLinkedEvent = False
> End If
> End If
> End Sub
>
> End Class
> '***
>
> dans ton cas (tu ne veux pas du scroll du bas), utilise ScrollModes.Vertical
> :O)
>
> --
> Cordialement
> Yanick
> MVP pour Visual Basic
> "Annie L." <AnnieL@discussions.microsoft.com> a écrit dans le message de
> news:C5019607-98DA-4BFA-B503-D926AC14B3E1@microsoft.com...
> > Ça fonctionne très bien!
> > Mais j'ai un autre problème que j'ai oublié de te parler!
> > Ce que j,essaie de faire, est un peu comme dans Excel. Geler une colonne
> > (ex.: dans datagrid_heures = seulement les heures de rendez-vous. Dans
> > datagrid_rendez-vous = chaque colonne est égale à un employé, donc
> plusieurs
> > colonnes.)
> > Jusqu'à date cela fonctionne très bien.
> > Mais lorsque je fais défiler le 'scroll' du bas (horiz.), il ne faut pas
> > qu'il fasse défiler l'autre datagrid (heures). Présentement, c'est ce
> qu'il
> > fait et cela 'plante' le programme. Il faudrait 'désactiver' le scroll du
> > bas. J'ai essayé de mettre en commentaires la propriété de ce 'scroll' et
> là
> > cela me génère des erreurs avant la compilation!
> >
> > Que me suggère-tu? Merci! on approche du but recherché!
> >
> > "Zoury" wrote:
> >
> > > > Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3
> à 4
> > > > compilation, il me génère une erreur "La référence d'objet n'est pas
> > > définie
> > > > à une instance d'un objet"
> > >
> > >
> > > Le générateur de code a mit à jour sa section de code et a ajouté les
> lignes
> > > suivantes :
> > > '***
> > > Me.dgdCarnetRV.LinkedGrid = Nothing
> > > Me.dgdCarnetHeures.LinkedGrid = Nothing
> > > '***
> > > ce qui fesait planter le code.
> > >
> > >
> > >
> > > > J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le
> form.,
> > > la
> > > > propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
> > > dans
> > > > la liste qui s'ouvre avec comme choix les 2 datagrid.
> > > >
> > > > Je dois faire quelque chose de pas correct!!!!
> > >
> > > mmm.. ici je peux sélectionner les grilles. vérifie si, après la
> > > modification proposée dans l'autre message, tu obtiens toujours le même
> > > résultat. sinon on cherchera pourquoi.. :O)
> > >
> > >
> > > --
> > > Cordialement
> > > Yanick
> > > MVP pour Visual Basic
> > >
> > >
> > >
>
>
>
Bonjour!!!
Wow! super! mais je ne saisie pas le "scrollModes". Présentement j'ai 2
nouvelles propriétés 'HorizScrollValue' et 'VertScrollValue' qui ont comme
valeur "0". Si je change ces propriétés soit à "1" ou "2", j'obtient un
message me disant que la valeur saisie n'est pas correcte.
En Éxécutant mon application, le 'scroll' du bas n'affecte pas l'autre
datagrid. C'est parfait, mais complexe comme programmation!!!
Mais le 'scroll' vertical ne fonctionne pas. J'aimerais savoir comment
appliquer le 'ScrollModes'.
Autre chose que j'ai remarqué hier! Quand je 'scroll' verticalement, cela
fonctionne très bien. Mais je n'arrive pas à pouvoir cliquer sur ma dernière
ligne et si j'arrive à cliquer sur la fraction de ligne que je vois, il
bousille les coordonnées de ma ligne à cause du 'scroll' du bas qui cache au
3/4 ma ligne parce que j'ai plusieurs colonnes. Mais si j'ai 3 à 4 colonnes
par exemple, tout est correct car il n'y a pas de 'scroll' dans le bas. Je
trouverai bien une solution! Tu m'as apportée une aide incroyable et je t'en
remercie grandement et j'espère que d'autres programmeurs auront suivi le
déroulement de cette fonctionnalité et qui servira à développer d'autres
classes.
Ce sont des exemples que nous ne retrouvons pas dans des livres (et j'en ai
plusieurs)!
Cela faisait plus d'un mois que je renvoyait mon 'Post' sur le site et enfin
une réponse.
Encore mille fois Merci!!!
"Zoury" wrote:
> Salut Annie!
>
> essai cette classe, c'est l'autre modifié un peu, j'y ai ajouté une
> propriété nommé ScrollMode qui te permet de sélectionner laquelle(s) des
> barres de défilement sera "linker" avec l'autre grid. :
> '***
> Option Explicit On
>
> Imports System.Runtime.InteropServices
> Imports System.Windows.Forms
> Imports System.ComponentModel
>
> <Flags()> _
> Public Enum ScrollModes
> NotSet = 0
> Horizontal = 1
> Vertical = 2
> Both = 3
> End Enum
>
> Public Class LinkableDataGrid
> Inherits DataGrid
>
> ' attributs
> Private _eScrollMode As ScrollModes
> Private _dgLinkedGrid As LinkableDataGrid
>
> ' variables
> Private _bLinkedGridIsChanging As Boolean
> Private _bScrollModeIsChanging As Boolean
> Private _bIgnoreGridLinkedEvent As Boolean
>
> <DefaultValue(ScrollModes.NotSet)> _
> Public Property ScrollMode() As ScrollModes
> Get
> Return _eScrollMode
> End Get
> Set(ByVal Value As ScrollModes)
> If ((Not _bScrollModeIsChanging) And (Not
> _bLinkedGridIsChanging)) Then
> _eScrollMode = Value
> If (Not _dgLinkedGrid Is Nothing) Then
> _bScrollModeIsChanging = True
> _dgLinkedGrid.ScrollMode = Value
> _bScrollModeIsChanging = False
> End If
> End If
> End Set
> End Property
> Public Property LinkedGrid() As LinkableDataGrid
> Get
> Return _dgLinkedGrid
> End Get
> Set(ByVal Value As LinkableDataGrid)
>
> ' vérifie si une modifs est en cours
> ' si oui, on passe notre tour..
> ' cela évite la récursion infinie
> ' qui est causé par le fait que l'on modifie
> ' la propriété LinkedGrid de notre _dgLinkedGrid
> ' se qui déclancherait l'événement à nouveau...
> If ((Not _bScrollModeIsChanging) And (Not
> _bLinkedGridIsChanging)) Then
>
> ' vérifie la nouvelle valeur
> ' si elle est à Nothing, c'est que l'on veut délier les
> grilles
> ' sinon, on branche les grilles ensembles..
> If ((Value Is Nothing) And (Not _dgLinkedGrid Is Nothing))
> Then
> _bLinkedGridIsChanging = True
> _dgLinkedGrid.LinkedGrid = Nothing
> _bLinkedGridIsChanging = False
> _dgLinkedGrid = Nothing
> ElseIf (Not _dgLinkedGrid Is Value) Then
> _dgLinkedGrid = Value
> _bLinkedGridIsChanging = True
> _dgLinkedGrid.LinkedGrid = Me
> _bLinkedGridIsChanging = False
> _dgLinkedGrid.HorizScrollValue = Me.HorizScrollValue
> _dgLinkedGrid.VertScrollValue = Me.VertScrollValue
> _dgLinkedGrid.ScrollMode = _eScrollMode
> End If
>
> 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 _bIgnoreGridLinkedEvent) Then
> MyBase.GridHScrolled(sender, se)
> If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
> ScrollModes.Horizontal) = ScrollModes.Horizontal)) Then
> _dgLinkedGrid.HorizScrollValue = se.NewValue
> _bIgnoreGridLinkedEvent = True
> _dgLinkedGrid.GridHScrolled(sender, se)
> _bIgnoreGridLinkedEvent = False
> End If
> End If
> End Sub
> Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal se
> As System.Windows.Forms.ScrollEventArgs)
> If (Not _bIgnoreGridLinkedEvent) Then
> MyBase.GridVScrolled(sender, se)
> If ((Not _dgLinkedGrid Is Nothing) And ((_eScrollMode And
> ScrollModes.Vertical) = ScrollModes.Vertical)) Then
> _dgLinkedGrid.VertScrollValue = se.NewValue
> _bIgnoreGridLinkedEvent = True
> _dgLinkedGrid.GridVScrolled(sender, se)
> _bIgnoreGridLinkedEvent = False
> End If
> End If
> End Sub
>
> End Class
> '***
>
> dans ton cas (tu ne veux pas du scroll du bas), utilise ScrollModes.Vertical
> :O)
>
> --
> Cordialement
> Yanick
> MVP pour Visual Basic
> "Annie L." a écrit dans le message de
> news:
> > Ça fonctionne très bien!
> > Mais j'ai un autre problème que j'ai oublié de te parler!
> > Ce que j,essaie de faire, est un peu comme dans Excel. Geler une colonne
> > (ex.: dans datagrid_heures = seulement les heures de rendez-vous. Dans
> > datagrid_rendez-vous = chaque colonne est égale à un employé, donc
> plusieurs
> > colonnes.)
> > Jusqu'à date cela fonctionne très bien.
> > Mais lorsque je fais défiler le 'scroll' du bas (horiz.), il ne faut pas
> > qu'il fasse défiler l'autre datagrid (heures). Présentement, c'est ce
> qu'il
> > fait et cela 'plante' le programme. Il faudrait 'désactiver' le scroll du
> > bas. J'ai essayé de mettre en commentaires la propriété de ce 'scroll' et
> là
> > cela me génère des erreurs avant la compilation!
> >
> > Que me suggère-tu? Merci! on approche du but recherché!
> >
> > "Zoury" wrote:
> >
> > > > Où est mon problème. Je sais qu'il fonctionnait correctement. Après 3
> à 4
> > > > compilation, il me génère une erreur "La référence d'objet n'est pas
> > > définie
> > > > à une instance d'un objet"
> > >
> > >
> > > Le générateur de code a mit à jour sa section de code et a ajouté les
> lignes
> > > suivantes :
> > > '***
> > > Me.dgdCarnetRV.LinkedGrid = Nothing
> > > Me.dgdCarnetHeures.LinkedGrid = Nothing
> > > '***
> > > ce qui fesait planter le code.
> > >
> > >
> > >
> > > > J'ai remarqué aussi que dans les propriétés des 2 datagrid sur le
> form.,
> > > la
> > > > propriété 'LinkedGrid' y apparaît mais il ne veut pas prendre un choix
> > > dans
> > > > la liste qui s'ouvre avec comme choix les 2 datagrid.
> > > >
> > > > Je dois faire quelque chose de pas correct!!!!
> > >
> > > mmm.. ici je peux sélectionner les grilles. vérifie si, après la
> > > modification proposée dans l'autre message, tu obtiens toujours le même
> > > résultat. sinon on cherchera pourquoi.. :O)
> > >
> > >
> > > --
> > > Cordialement
> > > Yanick
> > > MVP pour Visual Basic
> > >
> > >
> > >
>
>
>