2010-06-06 17 views
3

Je dois changer le curseur de la souris lorsque le bouton gauche de la souris est pressé. Malheureusement, les modifications apportées au curseur de la souris sont ignorées jusqu'à ce que le bouton gauche de la souris soit relâché. Y at-il une solution de contournement à cela? Merci pour tout indice!Changer le curseur de la souris quand on appuie sur le bouton gauche de la souris?

(J'utilise WPF et C#)

EDIT:

Exemple de projet: http://cid-0432ee4cfe9c26a0.skydrive.live.com/self.aspx/%c3%96ffentlich/WpfApplication5.zip (il suffit de courir, les instructions sont indiquées dans l'application)

Code pour la échantillon:

XAML:

<Window x:Class="WpfApplication5.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="695" Loaded="Window_Loaded"> 
<Grid> 
    <Button Content="Button1" Height="287" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="235" /> 
    <Button Content="Button2" Height="287" HorizontalAlignment="Left" Margin="284,12,0,0" Name="button2" VerticalAlignment="Top" Width="278" MouseMove="button2_MouseMove" /> 
</Grid> 

classe de fenêtre:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void button2_MouseMove(object sender, MouseEventArgs e) 
    { 
     Cursor = Cursors.Cross; 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     button1.Content="Step1: Left click on this button, \nhold down the left mouse button"; 
     button2.Content = "(Make sure you don't hover this\n button before hovering Button1.\n Default application cursor\n is the normal arrow cursor)\n\n Step 2: Keep on holding the left mouse \nbutton, hover this button\n\nThe cursor won't change. (It will change after the \nleft mouse button was released)"; 
    } 
} 
+0

utilisez-vous l'événement MouseLeftButtonDown ou MouseLeftButtonClick? – Ozan

+0

Bonjour Ozan, J'utilise MouseLeftButtonDown. J'ai ajouté un échantillon ci-dessus. –

Répondre

7

Je vous recommande d'utiliser Preview * événements si possible des changements visuels, il gardera votre logique bien séparés. En outre, il est préférable (IMHO) d'utiliser la propriété Mouse.OverrideCursor pour modifier temporairement le curseur.

Par exemple:

void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    // ... 
    button1.PreviewMouseLeftButtonDown += Button1_PreviewMouseLeftButtonDown; 
    button1.PreviewMouseLeftButtonUp += Button1_PreviewMouseLeftButtonUp; 
} 

void Button1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    Mouse.OverrideCursor = Cursors.Cross; 
    Mouse.Capture(button1); 
} 

void Button1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    Mouse.Capture(null); 
    Mouse.OverrideCursor = null; 
} 
+0

Bonjour Dennis, merci beaucoup pour l'indice Mouse.OverrideCursor! Cela ne fonctionne pas pour l'exemple ci-dessus (après avoir cliqué sur un bouton, aucun événement mousemove n'est déclenché) mais cela fonctionne pour mon application réelle (où j'en ai besoin pendant un glisser-déposer). un: mousemove n'est pas déclenché lorsque le bouton gauche de la souris est enfoncé). Donc, même si ce n'est pas la réponse à mon exemple, cela résout mon problème :-) –

+0

@Stefan: Je l'ai testé avec l'exemple, mais je pensais que l'événement MouseMove était votre tentative de changer le curseur, donc je l'ai omis. – Dennis

+0

@Stefan: Soit dit en passant, ce n'est * pas * la façon dont vous changez le curseur pour donner des commentaires à l'utilisateur lors d'une opération glisser/déposer. Jetez un coup d'œil aux événements DragDrop.GiveFeedback et DragDrop.QueryContinueDrag (http://bit.ly/bbP14Y). – Dennis

0

Dans la souris vers le bas du gestionnaire, vous pouvez avoir du code ci-dessous.

try 
{ 
    Cursor = Cursors.WaitCursor; 
} 
catch(Exception ex) 
{ 
} 
finally 
{ 
    Cursor = Cursors.Default; 
} 

Vous pouvez réinitialiser le curseur par défaut selon vos besoins.

Questions connexes