IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C# 2.0/Clipboard] Comment réussir l'implementation copy et paste ?


Sujet :

C#

  1. #1
    Membre du Club Avatar de AdriM
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Points : 66
    Points
    66
    Par défaut [C# 2.0/Clipboard] Comment réussir l'implementation copy et paste ?
    Salut à tous,

    Je suis en train de développer les fonctions copy/paste specifiques a la copie de noeuds en utilisant la classe System.Windows.Forms.Clipboard de la framework .net.

    Cette classe fournit les fonctions SetDataObject, qui (théoriquement ) copie n'importe quel type d'object dans le clipboard, et GetDataObject, qui redonne n'importe quel object garder dans le clipboard.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public override void Copy()
    {
       System.Windows.Forms.DataObject dataObj = new
     System.Windows.Forms.DataObject(typeof(TreeINode).ToString(),
     this.Node);
       System.Windows.Forms.Clipboard.SetDataObject(dataObj, true, 10, 50);
       //...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public override void Paste()
    {
       System.Windows.Forms.IDataObject dataObject =
     System.Windows.Forms.Clipboard.GetDataObject();
       TreeINode newChild = dataObject.GetData(typeof(TreeINode).ToString
    ()) as TreeINode;
       //...
    }
    Le problème:
    Je n'arrive pas à recuperer l'object garder dans le clipboard... Si je garde une string (le nom de mon treenode par exemple) pas de problème, si j'y garde un object plus complexe, surtout un object d'une classe que je definis, comme le TreeINode... alors là je reçois toujours une valeur null...

    Je vois pas d'ou viens le problème. Si cela vient de mon copy où je garde l'object dans le clipboard ou dans le paste...

    Quelqu'un a une idée, ou une solution alternative pour garder des objects dans le clipboard et le recupérer?

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par MSDN
    Remarque Un objet doit être sérialisable pour pouvoir être placé dans le Presse-papiers. Si vous passez un objet qui n'est pas sérialisable à cette méthode, celle-ci échoue sans lever d'exception. Pour plus d'informations sur la sérialisation, consultez Sérialisation.
    La classe Clipboard peut être utilisée uniquement dans les threads en mode STA (Single Thread Apartment). Pour utiliser cette classe, vérifiez que votre méthode Main est marquée avec l'attribut STAThreadAttribute.
    As-tu verifié ces aspects ? notamment lors du SetDataObject
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre du Club Avatar de AdriM
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Points : 66
    Points
    66
    Par défaut
    Non... j'avais pas vu. Je viens de créer ma propre classe Clipboard... en fait une classe singleton avec une list temporaire ou je garde tout ce que j'ai besoin... Peut etre pas idéal mais pour l'instant c'est suffisant.

    Mais merci bien, je teste dès que possible.

  4. #4
    Membre du Club Avatar de AdriM
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Points : 66
    Points
    66
    Par défaut
    Salut...

    Toujours qques problèmes avec ce satané Copy/Paste. J'ai crée un Format propre, car je veux garder une ArrayList dans le Clipboard...

    J'ai crée une petite classe serializable ReferenceFormat a partir d'un exemple quoi marchait très bien, pour des types simples (images, textes...)

    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
     
        /// <summary> 
        /// Define a new type of formats for the Clipboard.
        /// </summary>
        [Serializable()]
        public class ReferenceFormat
        {
            #region Properties
     
            private static DataFormats.Format _format;
     
            static ReferenceFormat()
            {
                // Registers a new data _format with the windows Clipboard
                _format = DataFormats.GetFormat(typeof(ReferenceFormat).FullName);
            }
     
            public static DataFormats.Format Format
            {
                get
                {
                    return _format;
                }
            }
     
            private ArrayList _arrayData;
     
            public ArrayList ArrayData
            {
                get
                {
                    return _arrayData;
                }
                set
                {
                    _arrayData = value;
                }
            }
     
            #endregion
     
            #region Constructors
     
            /// <summary>
            /// Default constructor.
            /// </summary>
            public ReferenceFormat()
            {
                _arrayData = new ArrayList();
            }
     
            public ReferenceFormat(ArrayList nodeRef)
            {
                _arrayData = nodeRef;
            }
     
     
            #endregion
     
            #region Methods
     
            public override string ToString()
            {
                string arrayString = "";
     
                for (int i = 0; i < ArrayData.Count; i++)
                {
                    arrayString += ArrayData[i].ToString();
                    if (i + 1 < ArrayData.Count) arrayString += ":";
                }
     
                return base.ToString();
            }
            #endregion
        }
    Le problème... pour un ArrayList, ça ne marche pas. Ça ne garde rien dans le Clipboard.

    Quelqu'un sait si c'est une allergie du Clipboard aux listes, ou si c'est moi qui foire (qui a dis "comme d'hab'"?? )

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Tu as essayé avec un simple tableau d'objet ?
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Membre du Club Avatar de AdriM
    Inscrit en
    Mars 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 70
    Points : 66
    Points
    66
    Par défaut
    J'avais déjà essayer sans succès avec un tableau de string Je vais revoir ça mieux avec un tableau d'objects.

    Merci... apparement ça marche avec un tableau d'objects.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/12/2008, 15h15
  2. Comment protéger mon programme contre une copie ?
    Par bolanoy dans le forum Langage
    Réponses: 4
    Dernier message: 18/07/2008, 17h11
  3. Réponses: 1
    Dernier message: 12/09/2007, 16h17
  4. [CF][VB.Net] Comment manipuler Clipboard ?
    Par dadou38 dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 10/02/2006, 14h40
  5. Réponses: 17
    Dernier message: 31/10/2005, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo