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

Windows Presentation Foundation Discussion :

[C#] DragOver & DragDropEffects


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de BigBenQ
    Inscrit en
    Juillet 2005
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 363
    Par défaut [C#] DragOver & DragDropEffects
    Bonjour à tous,

    Lorsque j'utilise DragDropEffects pour changer mon curseur (lors d'un dragover notemment) cela ne marche pas.

    Voici mon exemple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            private void DragOver(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(typeof(Rectangle)))
                {
                    e.Effects = DragDropEffects.Copy;
                }
                else
                {
                    e.Effects = DragDropEffects.None;
                }
            }

    Ainsi, si c'est un rectangle, je mets une icone de copie, sinon rien.
    Hélas cela ne marche pas du tout.
    En effet, peu importe le contenu de mon drag, j'ai toujours l'icone de "copie" et ce malgrès que je passe sur l'instruction "e.Effects = DragDropEffects.None;" (vérifié au débugage)

    Help ?

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu as essayé de prendre du texte comme contenu de ton Drag ? Car si tu essayes ave cdes éléments qui héritent de Rectangle, c'est p-e la cause....

  3. #3
    Membre chevronné Avatar de BigBenQ
    Inscrit en
    Juillet 2005
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 363
    Par défaut
    Le problème est plus grave que ca docteur.

    En effet, j'ai une icone de drag&drop normal avec la fonction suivante :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            private void TextBox_DragOver(object sender, DragEventArgs e)
            {
                e.Effects = DragDropEffects.None;
            }

    J'aimerais avoir l'icone qui me dit qu'on peut pas drop ici, comment faire ?

  4. #4
    Membre chevronné Avatar de BigBenQ
    Inscrit en
    Juillet 2005
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 363
    Par défaut
    J'ai l'impression que depuis que j'ai mis "allowdrop = true" je peux dragover tout et n'importequoi sans controle ( du moins sans controle avant le drop )

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Hum... ce n'est pas parce que tu met AllowDrop à True que tu dois pouvoir drag&droper n'importe quoi Ca veut juste dire que le contrôle est "pret" à recevoir des données.

    Peut-on voir un peu plus de code ?

  6. #6
    Membre chevronné Avatar de BigBenQ
    Inscrit en
    Juillet 2005
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 363
    Par défaut
    Merci de m'aider, voici un peu plus de code.
    L'exemple est simple, 2 rectangles : 1 "dragable", 1 allowdrop.
    Le problème, j'ai toujours la même icone de "dragover"

    Code C# : 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
     
     
    using System;
    using System.IO;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Windows.Input;
     
    namespace testdd
    {
    	public partial class Window1
    	{
    		public Window1()
    		{
    			this.InitializeComponent();
     
    			// Insert code required on object creation below this point.
    		}
     
            private void Rectangle_DragOver(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(typeof(Rectangle)))
                {
     
                    e.Effects = DragDropEffects.Copy;
     
                }
     
                else
                {
     
                    e.Effects = DragDropEffects.None;
     
                }
     
            }
     
            private void Rectangle_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
            {
                if (e.LeftButton == MouseButtonState.Pressed)
                {
     
                    DragDropEffects effects;
     
                    DataObject obj = new DataObject();
     
     
     
                    obj.SetData(typeof(Rectangle),(Rectangle)sender);
     
     
     
                    effects = DragDrop.DoDragDrop((Rectangle)sender, obj, DragDropEffects.Copy | DragDropEffects.Move);
     
                }
     
     
            }
     
    	}
    }


    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    <Window
    	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    	x:Class="testdd.Window1"
    	x:Name="Window"
    	Title="Window1"
    	Width="127" Height="235" xmlns:d="http://schemas.microsoft.com/expression/blend/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
     
    	<Grid x:Name="LayoutRoot">
    		<Rectangle Fill="#FFFFC300" Stroke="#FF000000" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Left" Margin="8,95,0,0" VerticalAlignment="Top" Width="92" Height="83" MouseMove="Rectangle_MouseMove"/>
    		<Rectangle Fill="#FF0059FF" Stroke="#FF000000" AllowDrop="True" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment" HorizontalAlignment="Left" Margin="8,8,0,0" VerticalAlignment="Top" Width="92" Height="83" PreviewDragOver="Rectangle_DragOver"/>
    	</Grid>
    </Window>

    J'ai tester en dragant du text ou encore des fichier dessus, ca passe bien par la ligne "e.Effects = DragDropEffects.None;" mais aucune différence visuelle...


    Merci

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

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