none
Conversion code c# en Vb.net Erreur : RRS feed

  • Question

  • Bonsoir,

    j'ai trouver sur internet un code assez pratique pour faire défiler un texte en WPF sur un canvas.

    Cette source fonctionne très bien en C# . Par contre dès que j'essaie de la convertir en VB.net je rencontre plusieurs problème.

    J'ai essayé des converteurs en lignes: mais totalement inefficace pour le coup.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Windows.Threading;
    using System.Timers;
    
    namespace WpfCanvasTest
    {
    	public partial class Window1 : Window
    	{
    		const double gap = 100.0; // pixel gap between each TextBlock
    		const int timer_interval = 16; // number of ms between timer ticks. 16 is near 1/60th second, for smoother updates on LCD displays
    		const double move_amount = 2.5; // number of pixels to move each timer tick. 1 - 1.5 is ideal, any higher will introduce judders
    
    		private LinkedList<TextBlock> textBlocks = new LinkedList<TextBlock>();
    		private Timer timer = new Timer();
    
    		public Window1()
    		{
    			InitializeComponent();
    
    			// A snapshot of today's news (16th July 2009)
    
    			AddTextBlock("Headlines:");
    			AddTextBlock("Enhanced Apollo footage released by NASA, original, high quality footage lost");
    			AddTextBlock("UK Swine Flu deaths hit 29");
    			AddTextBlock("Sport:");
    			AddTextBlock("England batsmen struggle in final session on first day of second test against Australia for Ashes");
    			AddTextBlock("Owen will be success -- Ronaldo");
    			AddTextBlock("Tech:");
    			AddTextBlock("Twitter exec's email hacked, stolen documents published on-line");
    			AddTextBlock("62% of Sun's shareholders vote to approval Oracle deal");
    
    			canvas1.Dispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(Object state)
    			{
    				var node = textBlocks.First;
    				
    				while (node != null)
    				{
    					double left = 0;
    
    					if (node.Previous != null)
    					{
    						Canvas.SetLeft(node.Value, Canvas.GetLeft(node.Previous.Value) + node.Previous.Value.ActualWidth + gap);
    					}
    					else
    					{
    						Canvas.SetLeft(node.Value, canvas1.Width + gap);
    					}
    					
    					node = node.Next;
    				}
    
    				return null;
    
    			}), null);
    
    			timer.Interval = timer_interval;
    			timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
    			timer.Start();
    		}
    
    		void timer_Elapsed(object sender, ElapsedEventArgs e)
    		{
    			canvas1.Dispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(Object state)
    			{
    				var node = textBlocks.First;
    				var lastNode = textBlocks.Last;
    
    				while (node != null)
    				{
    					double newLeft = Canvas.GetLeft(node.Value) - move_amount;
    
    					if (newLeft < (0 - (node.Value.ActualWidth + gap)))
    					{
    						textBlocks.Remove(node);
    
    						var lastNodeLeftPos = Canvas.GetLeft(lastNode.Value);
    
    						textBlocks.AddLast(node);
    
    						if ((lastNodeLeftPos + lastNode.Value.ActualWidth + gap)> canvas1.Width) // Last element is offscreen
    						{
    							newLeft = lastNodeLeftPos + lastNode.Value.ActualWidth + gap;
    						}
    						else
    						{
    							newLeft = canvas1.Width + gap;
    						}
    					}
    					
    					Canvas.SetLeft(node.Value, newLeft);
    
    					node = node == lastNode ? null : node.Next;
    				}
    
    				return null;
    
    			}), null);
    		}
    
    		void AddTextBlock(string Text)
    		{
    			TextBlock tb = new TextBlock();
    			tb.Text = Text;
    			tb.FontSize = 28;
    			tb.FontWeight = FontWeights.Normal;
    			tb.Foreground = Brushes.Black;
    
    			canvas1.Children.Add(tb);
    
    			Canvas.SetTop(tb, 20);
    			Canvas.SetLeft(tb, -999);
    
    			textBlocks.AddLast(tb);
    		}
    	}
    }
    

    Notamment çà

    canvas1.Dispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(Object state)
    			{

    et çà :

    timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);

    Si vous pouviez m'aider à le faire fonctionner en vb.net ! merci !

    vendredi 12 février 2016 16:49

Réponses

  • Bonjour,

    Il vous faut utiliser le mot clé AddressOf. Par exemple pour le delegate :

    new DispatcherOperationCallback(AddressOf MaMethode))

    Et plus loin :

    Private sub MaMethode(state as Object)
    ...
    End Sub

    Pour l'event :

    AddHandler timer.Elapsed, AddressOf OnTimerElapsed

    Private Sub OnTimerElapsed(sender as object, e as EventArgs)
    ...
    End Sub


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 29 février 2016 07:36

Toutes les réponses

  • Bonjour, Helpdesk_Me,

    Veuillez consulter l'article en bas :
    Converting between C# and VB.NET
    Je vous remercie par avance de votre retour.

    Cordialement,
    Teodora


    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    samedi 27 février 2016 22:48
    Modérateur
  • Bonjour,

    Il vous faut utiliser le mot clé AddressOf. Par exemple pour le delegate :

    new DispatcherOperationCallback(AddressOf MaMethode))

    Et plus loin :

    Private sub MaMethode(state as Object)
    ...
    End Sub

    Pour l'event :

    AddHandler timer.Elapsed, AddressOf OnTimerElapsed

    Private Sub OnTimerElapsed(sender as object, e as EventArgs)
    ...
    End Sub


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 29 février 2016 07:36