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

VB.NET Discussion :

[WPF MVVM] PasswordBox Visibilité temporaire du mot de passe.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut [WPF MVVM] PasswordBox Visibilité temporaire du mot de passe.
    Bonjour à tous,

    Mon logiciel à besoin d'un mot de passe pour se connecter à notre automate et contrairement au WinForm de VB6 (origine du code) et VB.net, le Textbox ne possède pas de paramètre "PasswordChar" qui remplace ce que l'on tape par le caractère spécifié.
    C’était trop simple, ils l'on enlevé en WPF, alors certes c'est pas très sécurisé, mais dans le code il suffisait de supprimer ce paramètre pour visualiser le texte. Cela me permettait temporairement d'afficher le mot de passe lorsque l'on appuyait sur un bouton à coté, par exemple.

    En WPF il y a le "Passwordbox" pour cela, mais essayant d'utiliser au maximum le MVVM, ce n'est pas si simple à mettre en place. Mais j'ai trouvé le moyen grâce à un code trouvé en C# que j'ai adapté en VB.net (voir ci dessous).
    J'arrive à mettre en place le PasswordBox et à récupérer le mot de passe dans le VueModel, mais je n'arrive pas à l'afficher du coup ce mot de passe si besoin, hormis le renvoyer cette fois vers un "Textbox" en clair (comme dans le projet ci-joint).

    Y a t'il un moyen de l'afficher dans cette même Passwordbox ou c'est peine perdu?

    Je n'est pas besoin d'une sécurité accrue pour ce mot de passe, mais il doit être masqué la plus par du temps, puisqu'un utilisateur lamda pourrais voir le mot de passe de l'administrateur au moment ou il le tape si c'etait directement dans la Textbox (ce que j'avais fait jusqu’à présent).

    -->Cette fonction n'est pas forcement utile, c'est plus un gadget qu'autre chose, mais s'il y a un moyen simple de l'afficher je suis preneur.


    Petit projet Passwordbox MVVM:PasswordBox_MVVM_VB.zip

  2. #2
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 204
    Par défaut
    Bonjour,

    Je pense qu'il est possible de faire cela en XAML, en créant éventuellement un trigger dans le style/template du contrôle PasswordBox. As-tu essayé de ce coté ?

    Personnellement, j'utilise ce genre de chose pour avoir 2 modes d'affichage pour un TextBox : lecture/survol et saisie. Si je n'ai pas le focus dans le TextBox, j'affecte un template différent.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    la propriété SecurePassword doit pouvoir être bindée à un SecureString
    via un style il doit être possible d'ajouter un "bouton oeil" pour afficher temporairement le code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour

    Tu peux toujours te "lier" par code behind aux props CLR Password et SecurePassword moyennant un "refactoring" du code de ton UserControl...
    Il suffit
    1/ d'une DP ("PwdBox") qui référence ton control PasswordBox lors de l'initialisation ...et qui permet de s'abonner à l'event PasswordChanged...

    2/d'une DP ("Code") de type string qui est mise à jour suivant la prop CLR Password de type string...du control PasswordBox .
    code exemple :
    1/ code behind .vb du UserControl:
    Code : 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
    Public Class MyControl
        Inherits UserControl
     
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Me.PwdBox = Me.pass
        End Sub
     
        Public Property PwdBox As PasswordBox
            Get
                Return GetValue(PwdBoxProperty)
            End Get
     
            Set(ByVal value As PasswordBox)
                SetValue(PwdBoxProperty, value)
            End Set
        End Property
     
        Public Shared ReadOnly PwdBoxProperty As DependencyProperty = _
                               DependencyProperty.Register("PwdBox", _
                               GetType(PasswordBox), GetType(MyControl), _
                               New FrameworkPropertyMetadata(Nothing, AddressOf OnPwdBoxChanged))
     
        Private Shared Sub OnPwdBoxChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
            Dim ctl As MyControl = CType(d, MyControl)
            Dim PassBox As PasswordBox = CType(e.NewValue, PasswordBox)
            If (PassBox IsNot Nothing) Then ctl.ProcessPwd(PassBox)
     
        End Sub
        Private Sub ProcessPwd(passbox As PasswordBox)
            AddHandler passbox.PasswordChanged, AddressOf OnPassBoxChanged
        End Sub
        Private Sub OnPassBoxChanged(sender As Object, e As RoutedEventArgs)
            Dim pd As PasswordBox = CType(sender, PasswordBox)
            Code = pd.Password
        End Sub
     
     
        Public Property Code As String
            Get
                Return GetValue(CodeProperty)
            End Get
     
            Set(ByVal value As String)
                SetValue(CodeProperty, value)
            End Set
        End Property
     
        Public Shared ReadOnly CodeProperty As DependencyProperty = _
                               DependencyProperty.Register("Code", _
                               GetType(String), GetType(MyControl), _
                               New FrameworkPropertyMetadata(Nothing, AddressOf OnCodeChanged))
     
        Private Shared Sub OnCodeChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
            Dim ctl As MyControl = CType(d, MyControl)
            Dim s As String = CType(e.NewValue, String)
            If (s IsNot Nothing) Then
                ctl.PwdBox.Password = s
            End If
     
        End Sub
    End Class
    code xaml du UserControl à dropper sur un form:

    Code XAML : 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
    <UserControl x:Class="MyControl"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:WpfSimplePWD"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
        <StackPanel >
            <StackPanel Orientation="Horizontal">
                <Label Content="Password" FontSize="14" Foreground="Blue" />
                <PasswordBox
                    Name="pass"
                    Margin="5" FontSize="14"
                    HorizontalAlignment="Center"
                    MaxLength="8"
                    PasswordChar="*"
                    Password="0123458">
                </PasswordBox>
            </StackPanel >
            <StackPanel Orientation="Horizontal">
                <Label Content="Display Password" FontSize="14" Foreground="Blue" />
                <TextBox 
                    x:Name="tb" 
                    FontSize="14"
                    HorizontalAlignment="Center"       
                    Text="{Binding Path=Code, RelativeSource={RelativeSource AncestorType={x:Type local:MyControl}}}"/>
            </StackPanel >
        </StackPanel >
    </UserControl>
    bon code...

  5. #5
    Membre éprouvé Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 931
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    la propriété SecurePassword doit pouvoir être bindée à un SecureString
    via un style il doit être possible d'ajouter un "bouton oeil" pour afficher temporairement le code
    Bonjour à tous,

    Merci Pol63 c'est exactement ce que j'aimerai faire.

    Citation Envoyé par MABROUKI Voir le message
    bonjour

    Tu peux toujours te "lier" par code behind aux props CLR Password et SecurePassword moyennant un "refactoring" du code de ton UserControl...
    Il suffit
    1/ d'une DP ("PwdBox") qui référence ton control PasswordBox lors de l'initialisation ...et qui permet de s'abonner à l'event PasswordChanged...

    2/d'une DP ("Code") de type string qui est mise à jour suivant la prop CLR Password de type string...du control PasswordBox .
    code exemple :
    1/ code behind .vb du UserControl:
    Merci MABROUKI, ton code fonctionne, comme toujours, merci. Bon cela me renvoi le mot de passe à l'envers, mais c'est un détail .

    Par contre comme je disais c'est un petit gadget, mais malheureusement je viens de penser à un truc. Dans mes derniers soft (VB6), j'ai ajouté une fonction pour sauvegarder le mot de passe (en crypter) pendant un temps donné.
    Cette fonction est par contre bien pratique pour l'administrateur. Je sauvegarde la session et donc le mot de passe si besoin. Lors de l'ouverture de la prochaine session je vérifie si le mot de passe est encore d'actualité, si oui je pré-remplis le champs Password, sinon j'efface le mot de passe sauvegardé. (Bien sur il y a un bouton pour effacer cette sauvegarde si un utilisateur sans droit particulier prend la main immédiatement après).

    Il faut donc que je puisse envoyer le mot de passe depuis mon VueModel vers la vue.

    Bon c'est bien pratique, mais pas non plus impératif donc ... par urgent.

Discussions similaires

  1. [WPF - MVVM] Communications entre ViewModels
    Par NeoKript dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 06/02/2012, 14h06
  2. Enum dans un combobox WPF MVVM
    Par july4474 dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 22/11/2011, 21h44
  3. [WPF & MVVM] Mediator et GC
    Par NeoKript dans le forum Windows Presentation Foundation
    Réponses: 9
    Dernier message: 12/01/2011, 07h52
  4. [WPF][MVVM] GridView bindé un ReadOnlyCollection
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 07/09/2010, 10h58
  5. [C#/WPF] MVVM envoie d'information au ViewModel
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 01/09/2010, 15h01

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