Comment permettre aux utilisateurs de copier plusieurs cellules dans le presse-papiers depuis le contrôle DataGridView de Windows Forms
Lorsque vous activez la copie de cellules, vous rendez les données dans votre contrôle DataGridView facilement accessibles à d’autres applications via le Clipboard. Les valeurs des cellules sélectionnées sont converties en chaînes de caractères et ajoutées au Presse-papiers sous forme de texte délimité par des tabulations, pour un collage dans des applications comme le Bloc-notes et Excel, ainsi que sous forme de tableau formaté en HTML, pour un collage dans des applications telles que Word.
Vous pouvez configurer la copie de cellules pour copier des valeurs de cellule uniquement, pour inclure du texte d’en-tête de ligne et de colonne dans les données du Presse-papiers ou pour inclure du texte d’en-tête uniquement lorsque les utilisateurs sélectionnent des lignes ou des colonnes entières.
Selon le mode de sélection, les utilisateurs peuvent sélectionner plusieurs groupes déconnectés de cellules. Lorsqu’un utilisateur copie des cellules dans le Presse-papiers, les lignes et les colonnes sans cellules sélectionnées ne sont pas copiées. Toutes les autres lignes ou colonnes deviennent des lignes et des colonnes dans la table de données copiée dans le Presse-papiers. Les cellules non sélectionnées de ces lignes ou colonnes sont copiées en tant qu’espaces réservés vides dans le Presse-papiers.
Pour activer la copie de cellules
Définissez la propriété DataGridView.ClipboardCopyMode.
this.DataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
Me.DataGridView1.ClipboardCopyMode = _ DataGridViewClipboardCopyMode.EnableWithoutHeaderText
Exemple
L’exemple de code complet suivant montre comment les cellules sont copiées dans le Presse-papiers. Cet exemple inclut un bouton qui copie les cellules sélectionnées dans le Presse-papiers à l’aide de la méthode DataGridView.GetClipboardContent et affiche le contenu du Presse-papiers dans une zone de texte.
using System;
using System.Windows.Forms;
public class Form1 : Form
{
private DataGridView DataGridView1 = new DataGridView();
private Button CopyPasteButton = new Button();
private TextBox TextBox1 = new TextBox();
[STAThreadAttribute()]
public static void Main()
{
Application.Run(new Form1());
}
public Form1()
{
this.DataGridView1.AllowUserToAddRows = false;
this.DataGridView1.Dock = DockStyle.Fill;
this.Controls.Add(this.DataGridView1);
this.CopyPasteButton.Text = "copy/paste selected cells";
this.CopyPasteButton.Dock = DockStyle.Top;
this.CopyPasteButton.Click += new EventHandler(CopyPasteButton_Click);
this.Controls.Add(this.CopyPasteButton);
this.TextBox1.Multiline = true;
this.TextBox1.Height = 100;
this.TextBox1.Dock = DockStyle.Bottom;
this.Controls.Add(this.TextBox1);
this.Load += new EventHandler(Form1_Load);
this.Text = "DataGridView Clipboard demo";
}
private void Form1_Load(object sender, System.EventArgs e)
{
// Initialize the DataGridView control.
this.DataGridView1.ColumnCount = 5;
this.DataGridView1.Rows.Add(new string[] { "A", "B", "C", "D", "E" });
this.DataGridView1.Rows.Add(new string[] { "F", "G", "H", "I", "J" });
this.DataGridView1.Rows.Add(new string[] { "K", "L", "M", "N", "O" });
this.DataGridView1.Rows.Add(new string[] { "P", "Q", "R", "S", "T" });
this.DataGridView1.Rows.Add(new string[] { "U", "V", "W", "X", "Y" });
this.DataGridView1.AutoResizeColumns();
this.DataGridView1.ClipboardCopyMode =
DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
}
private void CopyPasteButton_Click(object sender, System.EventArgs e)
{
if (this.DataGridView1
.GetCellCount(DataGridViewElementStates.Selected) > 0)
{
try
{
// Add the selection to the clipboard.
Clipboard.SetDataObject(
this.DataGridView1.GetClipboardContent());
// Replace the text box contents with the clipboard text.
this.TextBox1.Text = Clipboard.GetText();
}
catch (System.Runtime.InteropServices.ExternalException)
{
this.TextBox1.Text =
"The Clipboard could not be accessed. Please try again.";
}
}
}
}
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private WithEvents DataGridView1 As New DataGridView()
Private WithEvents CopyPasteButton As New Button()
Private TextBox1 As New TextBox()
<STAThreadAttribute()> _
Public Shared Sub Main()
Application.Run(New Form1())
End Sub
Public Sub New()
Me.DataGridView1.AllowUserToAddRows = False
Me.DataGridView1.Dock = DockStyle.Fill
Me.Controls.Add(Me.DataGridView1)
Me.CopyPasteButton.Text = "copy/paste selected cells"
Me.CopyPasteButton.Dock = DockStyle.Top
Me.Controls.Add(Me.CopyPasteButton)
Me.TextBox1.Multiline = True
Me.TextBox1.Height = 100
Me.TextBox1.Dock = DockStyle.Bottom
Me.Controls.Add(Me.TextBox1)
Me.Text = "DataGridView Clipboard demo"
End Sub
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
' Initialize the DataGridView control.
Me.DataGridView1.ColumnCount = 5
Me.DataGridView1.Rows.Add(New String() {"A", "B", "C", "D", "E"})
Me.DataGridView1.Rows.Add(New String() {"F", "G", "H", "I", "J"})
Me.DataGridView1.Rows.Add(New String() {"K", "L", "M", "N", "O"})
Me.DataGridView1.Rows.Add(New String() {"P", "Q", "R", "S", "T"})
Me.DataGridView1.Rows.Add(New String() {"U", "V", "W", "X", "Y"})
Me.DataGridView1.AutoResizeColumns()
Me.DataGridView1.ClipboardCopyMode = _
DataGridViewClipboardCopyMode.EnableWithoutHeaderText
End Sub
Private Sub CopyPasteButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles CopyPasteButton.Click
If Me.DataGridView1.GetCellCount( _
DataGridViewElementStates.Selected) > 0 Then
Try
' Add the selection to the clipboard.
Clipboard.SetDataObject( _
Me.DataGridView1.GetClipboardContent())
' Replace the text box contents with the clipboard text.
Me.TextBox1.Text = Clipboard.GetText()
Catch ex As System.Runtime.InteropServices.ExternalException
Me.TextBox1.Text = _
"The Clipboard could not be accessed. Please try again."
End Try
End If
End Sub
End Class
Compilation du code
Ce code nécessite :
- Références aux assemblys N :System et N :System.Windows.Forms.
Voir aussi
.NET Desktop feedback