J'ai un problème que je n'arrive pas à résoudre. Je vous explique, c'est très simple :

J'ai une classe hérité de DataGrid qui me sélectionne la ligne automatique lors d'un clique (évènement OnMouseUp).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Public Class DataGrid2
    Inherits DataGrid
 
    Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim hti As DataGrid.HitTestInfo = MyBase.HitTest(e.X, e.Y)
        If hti.Type = DataGrid.HitTestType.Cell Then
            MyBase.Select(hti.Row)
        End If
    End Sub
End Class
Ensuite j'ai une Form où il y a mon DataGrid2 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Public Class Form1
    Inherits System.Windows.Forms.Form
 
#Region " Code généré par le Concepteur Windows Form "
 
    Public Sub New()
        MyBase.New()
 
        'Cet appel est requis par le Concepteur Windows Form.
        InitializeComponent()
 
        'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
 
    End Sub
 
    'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub
 
    'Requis par le Concepteur Windows Form
    Private components As System.ComponentModel.IContainer
 
    'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
    'Elle peut être modifiée en utilisant le Concepteur Windows Form.  
    'Ne la modifiez pas en utilisant l'éditeur de code.
    Friend WithEvents dg As DataGrid2
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.dg = New DataGrid2
        CType(Me.dg, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'dg
        '
        Me.dg.DataMember = ""
        Me.dg.HeaderForeColor = System.Drawing.SystemColors.ControlText
        Me.dg.Location = New System.Drawing.Point(8, 16)
        Me.dg.Name = "dg"
        Me.dg.Size = New System.Drawing.Size(272, 192)
        Me.dg.TabIndex = 0
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(292, 266)
        Me.Controls.Add(Me.dg)
        Me.Name = "Form1"
        Me.Text = "Form1"
        CType(Me.dg, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)
 
    End Sub
 
#End Region
 
    Dim DS As New DataSet
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim dt As New DataTable
        dt.TableName = "Exemple"
        dt.Columns.Add(New DataColumn("Nom", GetType(String)))
        dt.Columns.Add(New DataColumn("Prenom", GetType(String)))
        dt.Columns.Add(New DataColumn("Paye", GetType(Single)))
        dt.Rows.Add(New Object() {"Bilou", "Gates", "12250,80"})
        dt.Rows.Add(New Object() {"Cassin", "René", "2212,50"})
        dt.Rows.Add(New Object() {"Dassin", "Jo", "22,50"})
        dt.Rows.Add(New Object() {"Jordan", "Yohan", "564,50"})
        DS.Tables.Add(dt)
        Me.dg.DataSource = Me.DS.Tables("Exemple")
    End Sub
End Class
La sélection de la ligne se fait très bien mais l'erreur se situe lorsque je veux redimensionner une ligne ou une colonne. Après un clique, le curseur reste avec la double flèche et je ne peux plus déplacer la souris en dehors d'une zone de l'ordre de la grandeur du DataGrid.

Je n'arrives à en sortir qu'en faisant Alt-F4 ou Ctrl-Alt-Suppr car je n'arrive pas à atteindre la croix pour fermer la fenêtre !

Note : J'ai VS.NET 2003.