2
votes

Comment détecter le déplacement du curseur, puis les données seront mises à jour dans WPF?

Disons que j'ai deux zones de texte nommées:

Prix = _______
Remise = _______

J'ai aussi une étiquette nommée Total.

Ce que je veux, c'est que lorsque je saisis une valeur dans la zone de texte Prix puis je déplace la souris et clique sur la zone de texte suivante qui est Remise , l'étiquette Total aura la valeur de Zone de texte Prix .

J'ai actuellement ceci:

lorsque je clique sur Entrée ou Tab sur mon clavier, il mettra à jour:

private void TxtPrice_KeyDown(object sender, KeyEventArgs e)
{
    if ((e.Key == Key.Return) || (e.Key == Key.Tab))
    {
        try
        {
          //some code
        }
        catch (Exception ex)
        {
           //some code
        }
    }
}

Je veux que les données soient mises à jour sans qu'il soit nécessaire de cliquer sur Entrée ou Tab .

Je veux que ces fonctions soient effectuées au niveau du code derrière. Est-il possible de faire ça? Si oui, comment cela se passerait-il?


4 commentaires

Vous devriez probablement vous pencher sur MVVM et la liaison plutôt que sur le code-behind. Cela facilitera les choses à long terme.


@KevinCook Je ne pense pas que MVVM soit plus facile pour un débutant - ha cette blague - que l'écriture simple dans le code derrière. Avec le code derrière la tactique, toute la logique est au même endroit et peut être simplement revue.


@Hille j'ai dit plus facile "à long terme". Il y a des avantages à écrire une logique métier sans être lié à l'intérieur des gestionnaires d'événements pour les tests et la maintenance. Je suppose que si la plupart de vos programmes sont des applications grossières d'une seule page (puisque votre commentaire suggère que toute la logique est au même endroit), vous n'avez probablement jamais eu à faire face à des projets complexes et vous avez limité vos connaissances en n'essayant pas MVVM.


@KevinCook Oui, la plupart de mes programmes sont des programmes à une seule page parce que ce sont de petits programmes avec une fonctionnalité ou des tests. Mais je n'utilise pas MVVM à grande échelle car ce n'est pas nécessaire et au travail nous avons nos propres conventions ... Mais revenons sur le sujet ... J'ai dit que pour un débutant je ne le ferais pas recommande MVVM car il est trop complexe. Il / Elle devrait d'abord apprendre les bases de la langue avant d'utiliser des techniques qu'il n'avait probablement jamais entendues auparavant ??


3 Réponses :


4
votes

Chaque TextBox a un événement LostFocus qui est déclenché sur la perte de son focus de la souris ou du clavier.

Ensuite, dans votre fonction TextBox_LostFocus () , vous faites quelque chose comme

Total.Content = Price.Text;

pour indiquer le prix actuel.


Peut implémenter des fonctionnalités de sécurité pour vérifier si le montant du prix TextBox est un double ou un int.


0 commentaires

0
votes

Je pense que vous pouvez utiliser l'événement TextChanged pour ce

private void TxtPrice_TextChanged(object sender, EventArgs e)
{
    TotalLabel.Text = TxtPrice.Text;
}



private void TxtDiscount_TextChanged(object sender, EventArgs e)
{
    //Logic for discount 
    //And update TotalLabel
}


0 commentaires

-1
votes

Vous pouvez utiliser l'événement GotFocus sur la zone de texte Discount Comme ceci:

private void Discount_GotFocus(object sender, RoutedEventArgs e)
{
    //Do something
}

et dans le code derrière:

<TextBox x:Name="Discount" GotFocus="Discount_GotFocus"></TextBox>


1 commentaires

Pourquoi devrions-nous mettre à jour l'étiquette total sur le focus? Cela signifie que si vous tabulez dans la zone de texte vide et y écrivez un montant, rien ne changera après avoir défini le focus sur un autre objet. Si vous vous concentrez ensuite sur la zone de texte pour la deuxième fois, l'étiquette total sera mise à jour avec l'ancienne valeur.