none
Problème d'utilisation de la méthode AddHandler RRS feed

  • Question

  •  

    Bonjour,

    Etant développeur C# et travaillant actuellement sur un projet en VB.Net, j'ai besoin d'aide pour convertir un bout de code.

    Voilà le bout de code que j'essaye de convertir en VB.Net.

     

    public MainPage()
        {
          InitializeComponent();
          Loaded += new RoutedEventHandler(MainPage_Loaded);
        }
    
        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
          var list = new ObservableCollection<string> { "hello", "world" };
          DataContext = list;
    
          //attach drop event
          sp1.AddHandler(DragDrop.DropEvent, new DragEventHandler(StackPanel_onDrop), true);
        }
    
        public void StackPanel_onDrop(object sender, DragEventArgs e)
        {
          var list = e.Data.GetData(e.Data.GetFormats()[0]) as SelectionCollection;
          foreach (var item in list)
          {
            sp1.Children.Add(
              new TextBlock
              {
                Text = item.Item.ToString()
              });
          }
          e.Handled = true;
        }

    Mon problème se situe au niveau du AddHandler. Lors de mes essais j'ai traduit cette partie par "Addhandler [evenement] , [delegate]"

    Ceci s'est toujours traduit par l'apparition de cette erreur: Type of the event handler must be DragEventHandler

    Si quelqu'un pouvait m'aider ce serait sympa.

    Merci

    Maxime

     

    mercredi 6 juillet 2011 16:06

Réponses

  • Bonsoir Maxime,

    J'ai eu le même souci pour passer de C# à VB (de plus que le convertisseur developerfusion ne convertit pas correctement ce type d'instructions)

    En fait il faut mettre AddressOf avant le nom du délégué, ça serait quelque chose comme :

    AddHandler [evenement], AddressOf [delegué]

    Voir : http://msdn.microsoft.com/fr-fr/library/7taxzxka%28v=VS.100%29.aspx

    Par contre ici la méthode en WPF est un peu différente, enfin il faut juste ajouter le AddressOf encore une fois :

    sp1.AddHandler(DragDrop.DropEvent, New DragEventHandler(AddressOf StackPanel_onDrop), True)

    Bonne soirée.


    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact
    • Marqué comme réponse maxime__ jeudi 7 juillet 2011 08:03
    mercredi 6 juillet 2011 19:14

Toutes les réponses

  • Bonsoir Maxime,

    J'ai eu le même souci pour passer de C# à VB (de plus que le convertisseur developerfusion ne convertit pas correctement ce type d'instructions)

    En fait il faut mettre AddressOf avant le nom du délégué, ça serait quelque chose comme :

    AddHandler [evenement], AddressOf [delegué]

    Voir : http://msdn.microsoft.com/fr-fr/library/7taxzxka%28v=VS.100%29.aspx

    Par contre ici la méthode en WPF est un peu différente, enfin il faut juste ajouter le AddressOf encore une fois :

    sp1.AddHandler(DragDrop.DropEvent, New DragEventHandler(AddressOf StackPanel_onDrop), True)

    Bonne soirée.


    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact
    • Marqué comme réponse maxime__ jeudi 7 juillet 2011 08:03
    mercredi 6 juillet 2011 19:14
  • Bonjour Michel,

    Merci pour cette réponse, en effet ça a résolu une partie du problème.

    Le soucis que j'ai maintenant c'est que je n'arrive pas à convertir cette ligne de code en vb.net afin d'y retrouver le même comportement:  sp1.AddHandler(DragDrop.DropEvent, new DragEventHandler(StackPanel_onDrop), true);

    D'après ce que j'ai compris du fonctionnement du AddHandler en vb, c'est qu'on ne peut ajouter un handler que sur un événement du composant.

    Or ici en c# je rajoute un événement, qu'on peut appeler de général à l'application, à un composant.

    Comment faire pour convertir cette ligne en vb.net ?

    Merci

    Maxime

    vendredi 15 juillet 2011 14:11
  • Bonjour Maxime,

    "je n'arrive pas à convertir cette ligne de code en vb.net"

    J'ai du mal à comprendre cette phrase car la ligne en question a déjà été convertie en VB.NET. (voir mon post plus haut)

    AddHandler permet d'ajouter un handler à n'importe quel évènement (Type Event) tant que sa signature correspond avec celle du gestionnaire d'évènement.

    Par contre pour Winforms le type RoutedEvent n'est pas pris en charge et donc l'instruction AddHandler [event], AddressOf [Delegate] ne permet pas l'utilisation de DragDrop.DropEvent.

    Mais  AddHandler sp1.Drop, New DragEventHandler(AddressOf StackPanel_onDrop) fonctionne

    Ou se situe le problème exactement ?


    N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement - Best Regards. Contact



    vendredi 15 juillet 2011 14:47
  • Bonjour Michel,

    En fait le problème vient du fait que je n'arrive pas à entrer dans l'événement.

    Voici mon code:

     

    Public Sub New()

            InitializeComponent()

            AddHandler sp1.Drop, New DragEventHandler(AddressOf StackPanel_OnDrop)

    End Sub

    Private Sub StackPanel_OnDrop()

    End Sub

    Je ne rentre jamais dans la méthode StackPanel_OnDrop. A noter que j'ai essayé le même principe avec l'événement Loaded et que ça a fonctionné.

    Merci.

    Maxime

     

    lundi 18 juillet 2011 14:50