2010-03-15 4 views
1

J'ai une application winform interne pour afficher, modifier et insérer des données de membre. Il y a environ 40 pages de formulaire de sepertate qu'ils utilisent pour manipuler différentes parties des données.Implémentation de l'affichage en lecture seule dans l'application Winform

Ma question est la suivante. Quelle est la meilleure façon d'implémenter une vue en lecture seule pour une page de formulaire?

Mes pensées étaient pour faire défiler par les commandes de réglage Enabled = False ou les laisser être, mais pas autoriser les modifications de données (pas de bouton Enregistrer etc) à moins qu'il est « déverrouillé ».

Je suis curieux de savoir comment les autres gérer cela avec les applications WinForm?

+1

S'il vous plaît noter: ReadOnly = Désactivé. –

Répondre

1

Je pense que si un champ n'est pas destiné à être édité, il ne devrait pas ressembler à un champ. Le faire ressembler à un champ donne à l'utilisateur file d'attente visuelle qu'il devrait être modifiable. Ils peuvent se demander pourquoi ce n'est pas le cas. Donc, au lieu de Enabled=False, pourquoi ne faites-vous pas les étiquettes de champs en lecture seule?

Mise à jour: Une alternative si vous devez les conserver Les champs de texte sont de les styler pour ressembler à des étiquettes. Cela signifierait rendre leur couleur de fond grise, en supprimant la bordure et en supprimant le tabstop. Vous pouvez créer une fonction DisableField pour ce faire.

+0

Je ne suis pas sûr que ce soit faisable pour notre installation. Je devrais changer de 'labels 'pour' textboxes' quand ils voulaient éditer l'information. –

+0

Oui, c'est une meilleure expérience utilisateur. Sinon, les utilisateurs ont tendance à demander "comment puis-je activer ce champ?" ... – Seb

+0

afin que vous ayez plusieurs formulaires basés sur l'utilisateur actuel. Si seulement ils sont actuellement en lecture seule, ils ont montré 'frmMemberReadOnly'. Si elles ont actuellement des autorisations complètes, affichez-leur une forme entièrement différente ('frmMemberFull') avec des contrôles modifiables .... –

1

Si votre liaison de données ne prend pas en charge readonly, alors oui, écrivez du code pour rendre l'interface utilisateur aussi lisible que possible. Mais ce n'est pas sûr, alors assurez-vous de bloquer toutes les commandes qui pourraient déclencher une mise à jour.

Vous souhaitez que la lecture soit cohérente, n'autorisez pas les utilisateurs à modifier un champ qu'ils ne peuvent pas enregistrer. Mais ne définissez pas Enabled = false partout, qui se comporte différemment (pas select/copy etc).

Et pensez aux comboboxes, voulez-vous qu'ils soient en mesure de dérouler?

+0

La liaison de données Windows standard est en lecture seule? Est-ce que vous dites dans votre deuxième paragraphe que je devrais surveiller chaque champs click_event et vérifier s'il est actuellement "en lecture seule"? –

+0

Je ne sais pas quelle forme de liaison de données vous utilisez ... pourrait être manuelle. Et non, n'ajoutez pas d'événements à tous les contrôles, assurez-vous seulement de la logique principale pour sauvegarder les blocs. –

0

Il serait peut-être préférable de le dire de cette façon, si les champs du formulaire sont en lecture seule, puis remplacez-les par des étiquettes qui ne sont pas modifiables. Cela sera plus approprié pour les boîtes de texte, les cases à cocher, comme pour les listes déroulantes et les listes déroulantes, peut-être, vous devrez leur donner une étiquette, en montrant la sélection utilisée dans les deux cas comme étiquettes - que pensez-vous?

En fait, voici quelques liens qui vous permettront de conserver la zone de liste déroulante/listboxes si vous souhaitez éviter de faire les sélections que les étiquettes ...

  • Un article sur la mise en œuvre d'un combo- readonly La boîte est sur CodeProject
  • Le seul gotcha est la combo-boîte ne semblera pas polie si readonly, cet article sur CodeProject montre comment le rendre plus poli.
  • A readonly combobox (VB.NET) en utilisant ici la IExtendedProvider sur CodeProject
  • une zone de liste combinée à une case à cocher utilisée comme zone de liste en lecture seule ici sur CodeProject
  • Comment désactiver la case à cocher mais pas ici sur la barre de défilement Social.MSDN.Microsoft.com
  • Un article sur listbox avec les éléments désactivés ici sur CodeProject
Questions connexes