2009-01-07 7 views
0

Vous vous demandez simplement si nous avons accès au contrôle/éditeur PocketOutlook DaysOfWeek, ou si quelqu'un d'autre a fait son propre usage gratuit.Peut-on accéder à un contrôle DaysOfWeek réutilisable?

Je cherche quelque chose exactement comme ce qui se trouve dans l'éditeur de motif récurrent de rendez-Calendrier Outlook.

  1. Calendrier Ouvrir
  2. Créer un nouveau rendez-vous
  3. Cliquez sur "Survient", puis "Modifier < modèle ...>"
  4. Cliquez sur "Suivant"
  5. Le contrôle qui a DLMMJVS, où vous pouvez appuyer sur le carré du jour pour activer/désactiver, ou utiliser les touches physiques pour naviguer.

--update ------------------------

Ah bien, je viens de rouler ma propre contrôle.

Pas trop difficile, je viens d'utiliser 7 LinkLabels w/click handlers. En fait, la partie la plus difficile était d'obtenir une bordure autour de lui (en utilisant le positionnement manuel pour placer le lien blanc juste à l'intérieur d'un panneau noir). Il est ridicule que les concepteurs de .NET CF aient pensé que nous n'aurions pas besoin de FRONTIERES.

J'ai exposé la valeur DaysOfWeek avec une propriété Value et un événement ValueChanged. Presto, un contrôle DaysOfWeek!

Répondre

1

Voici quelques extraits de code pour mon contrôle homebrewed:

public partial class DaysOfWeekPicker : UserControl 
{ 
    public event EventHandler ValueChanged; 

    private DaysOfWeek myValue; 

    [DefaultValue (0)] 
    public DaysOfWeek Value 
    { 
     get { return myValue; } 
     set { myValue = value; RefreshData(); } 
    } 

    public DaysOfWeekPicker() 
    { 
     InitializeComponent(); 
    } 

    private void DayOfWeekClick (object sender, EventArgs e) 
    { 
     if (Object.ReferenceEquals (sender, g_l_Sunday)) 
     { 
      this.Value = this.Value^DaysOfWeek.Sunday; 
     } 
     else if (Object.ReferenceEquals (sender, g_l_Monday)) 
     { 
      this.Value = this.Value^DaysOfWeek.Monday; 
     } 
     else if (Object.ReferenceEquals (sender, g_l_Tuesday)) 
     { 
      this.Value = this.Value^DaysOfWeek.Tuesday; 
     } 
     else if (Object.ReferenceEquals (sender, g_l_Wednesday)) 
     { 
      this.Value = this.Value^DaysOfWeek.Wednesday; 
     } 
     else if (Object.ReferenceEquals (sender, g_l_Thursday)) 
     { 
      this.Value = this.Value^DaysOfWeek.Thursday; 
     } 
     else if (Object.ReferenceEquals (sender, g_l_Friday)) 
     { 
      this.Value = this.Value^DaysOfWeek.Friday; 
     } 
     else if (Object.ReferenceEquals (sender, g_l_Saturday)) 
     { 
      this.Value = this.Value^DaysOfWeek.Saturday; 
     } 
    } 

    private void RefreshData() 
    { 
     SetLabelDisplay (g_l_Sunday, (this.Value & DaysOfWeek.Sunday) == DaysOfWeek.Sunday); 
     SetLabelDisplay (g_l_Monday, (this.Value & DaysOfWeek.Monday) == DaysOfWeek.Monday); 
     SetLabelDisplay (g_l_Tuesday, (this.Value & DaysOfWeek.Tuesday) == DaysOfWeek.Tuesday); 
     SetLabelDisplay (g_l_Wednesday, (this.Value & DaysOfWeek.Wednesday) == DaysOfWeek.Wednesday); 
     SetLabelDisplay (g_l_Thursday, (this.Value & DaysOfWeek.Thursday) == DaysOfWeek.Thursday); 
     SetLabelDisplay (g_l_Friday, (this.Value & DaysOfWeek.Friday) == DaysOfWeek.Friday); 
     SetLabelDisplay (g_l_Saturday, (this.Value & DaysOfWeek.Saturday) == DaysOfWeek.Saturday); 

     if (this.ValueChanged != null) this.ValueChanged (this, EventArgs.Empty); 
    } 

    private void SetLabelDisplay (LinkLabel label, bool enabled) 
    { 
     if (enabled) 
     { 
      label.BackColor = Color.Black; 
      label.ForeColor = Color.White; 
     } 
     else 
     { 
      label.BackColor = Color.White; 
      label.ForeColor = Color.Black; 
     } 
    } 
} 

Il peut y avoir une meilleure façon de faire les comparaisons de valeur, mais c'est exactement ce que je suis venu très rapidement.

En ce qui concerne la partie concepteur, je ne la mettrai pas ici à cause de sa verbosité, mais c'est plutôt simple. Chaque jour est représenté par un LinkLabel avec l'événement click défini sur DayOfWeekClick. Chaque LinkLabel est à (1,1) et est 2 pixels plus petit dans les deux dimensions à partir du Panel parent. Chaque panneau parent a un ForeColor noir, donnant un effet de bordure. Chaque panneau est défini sur DockStyle.Left et la taille globale du contrôle est équivalente à panel.Width * 7, panel.Height.

1

Ce ne sont que des contrôles de case à cocher.

Questions connexes