2008-10-08 14 views
1

Dans cette situation particulière, il existe 9 étapes automatisées dans un processus qui prennent des durées variables. Nous avons actuellement un nombre indiquant le pourcentage au centre d'une barre de progression, mais il souffre du problème habituel du stop-and-go: courir jusqu'à 33%, attendre longtemps, courir jusqu'à 55%, attendre encore plus longtemps , puis finissant.Affichage de la progression dans une barre de progression

Quelle est la meilleure façon de le présenter à l'utilisateur? Devrions-nous supprimer le numéro, supprimer toute la barre de progression en faveur d'une animation en cercle de type ajax, ajouter un texte descriptif pour les neuf étapes et les cocher ou les laisser telles quelles? Quelles sont vos pensées?

Répondre

3

Si cela prend vraiment beaucoup de temps, le type d'animation AJAX n'est probablement pas une bonne idée. J'irais avec la liste de contrôle des articles.

+0

Je suis d'accord, si vous n'avez pas beaucoup d'étapes, montrez à l'utilisateur les étapes que vous faites. Ne leur donnez pas la fausse idée qu'il se passe beaucoup de choses sous le capot et ils recevront beaucoup de feed-back quand ils ne le feront pas. – Miles

+0

+1, d'accord. Montrez à l'utilisateur les étapes, peut-être avec un GIF animé d'un spinner à côté du spinner actif. (Et d'autres commentaires visuels - les tâches finies sont peut-être vertes et celles qui n'ont pas encore commencé sont grises.) –

2

La barre de progression sert à rassurer l'utilisateur que quelque chose se passe. Lorsque vous n'avez pas une liste plus détaillée des étapes, je vous recommande de les "truquer".

Une solution de base serait d'exécuter une minuterie et d'augmenter lentement la progression, en la plafonnant à la prochaine valeur de l'étape logique. Si les étapes prennent des durées très différentes, vous pouvez ajuster manuellement la valeur delta pour chaque 'tick' en fonction de l'étape dans laquelle vous vous trouvez.

Cependant, une meilleure solution (je l'ai déjà implémentée de cette façon, mais Je ne peux pas poster le code :)), ce serait de diminuer lentement le delta au fur et à mesure que l'étape continue - donc ça ne passe jamais tout à fait à l'étape suivante. Ensuite, la prochaine étape arrive, vous faites un bon saut et le cycle se répète.

1

Dans certains cas, il est plus important pour une barre de progression d'indiquer que quelque chose se passe que pour qu'elle soit précise et fluide. Les utilisateurs ont tendance à paniquer lorsque les barres de progression cessent de progresser. Si vous avez des problèmes avec le gel de la barre pendant des périodes de temps, il pourrait être préférable de le remplacer par une animation générique qui rassure l'utilisateur que quelque chose se passe sans se soucier de montrer à quel point le processus est. Ou, laissez la barre de progression en place, mais ajoutez une animation supplémentaire en tant que placebo.

0

J'ai eu presque le même problème. Nous avons également eu 9 étapes, donc le bar irait 11%, 22% 33% etc. et aussi avec quelques étapes prenant plus de temps que d'autres. J'ai décidé de faire en sorte que deux des étapes les plus longues comptent pour deux, donc nous avions 11 pas, donc ce n'était pas aussi évident, et les sauts n'étaient pas toujours égaux: 9%, 18%, 36%, 45%, 54%, 72%, 81%, 90%, fait. Les valeurs de pas étaient toujours les mêmes, mais comme la taille de l'étape n'était pas évidente, cela a fonctionné.

1

Pour élargir la réponse de Cadet Pirx, voici quelques WinForms code C#. Vous aurez besoin d'un nouveau UserControl. Mettez un contrôle ProgressBar dessus, appelé inner. Ajoutez le code suivant:

public partial class ZenoProgressBar : UserControl 
{ 
    private const int DEFAULT_FACTOR_VALUE = 10; 
    private const int DEFAULT_MAXIMUM_VALUE = 100; 

    public ZenoProgressBar() 
    { 
     InitializeComponent(); 

     Maximum = DEFAULT_MAXIMUM_VALUE; 
     Factor = DEFAULT_FACTOR_VALUE; 
    } 

    /// <summary> 
    /// The "speed" of the progress bar. While it will never get to 
    /// the end, it uses this number to decide how much further to 
    /// go each time Increment is called. For example, setting it to 
    /// 2 causes half of the remaining distance to be covered. 
    /// </summary> 
    [DefaultValue(DEFAULT_FACTOR_VALUE)] 
    public int Factor { get; set; } 

    [DefaultValue(DEFAULT_MAXIMUM_VALUE)] 
    public int Maximum { get; set; } 

    private void ZenoProgressBar_Load(object sender, EventArgs e) 
    { 
     inner.Dock = DockStyle.Fill; 
    } 

    public void Increment() 
    { 
     inner.Value += (inner.Maximum - inner.Value)/Factor; 
    } 
}