Можем ли мы получить доступ к повторно используемому элементу управления DaysOfWeek? - PullRequest
0 голосов
/ 07 января 2009

Просто интересно, есть ли у нас доступ к элементу управления / редактору PocketOutlook DaysOfWeek, или кто-то еще сделал свой собственный для бесплатного использования.

Я ищу что-то похожее на то, что есть в редакторе шаблонов повторяющихся встреч в календаре Outlook.

  1. Открыть календарь
  2. Создать новую встречу
  3. Нажмите «Происходит», затем «<Изменить шаблон ...>»
  4. Нажмите «Далее»
  5. Элемент управления, имеющий SMTWTFS, где вы можете нажать на квадрат дня, чтобы включить / отключить его, или использовать аппаратные клавиши для навигации.

- ОБНОВЛЕНИЕ ------------------------

Что ж, я только что развернул свой собственный элемент управления.

Не так уж сложно, я просто использовал 7 LinkLabels с обработчиками кликов. На самом деле самой сложной частью было получение границы вокруг нее (используя ручное позиционирование, чтобы поместить белую линковую метку прямо внутри черной панели). Смешно, что почему-то дизайнеры .NET CF думали, что нам не нужны ГРАНИЦЫ.

Я выставил значение DaysOfWeek с помощью свойства Value и события ValueChanged. Presto, элемент управления DaysOfWeek!

Ответы [ 2 ]

1 голос
/ 07 января 2009

Вот некоторые фрагменты кода для моего домашнего контроля:

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;
        }
    }
}

Возможно, есть лучший способ сделать сравнение значений, но это как раз то, что я придумал очень быстро.

Что касается дизайнерской части, я не буду ее здесь описывать из-за ее многословия, но она довольно проста. Каждый день представлен LinkLabel с событием click, установленным в DayOfWeekClick. Каждый LinkLabel имеет (1,1) и на 2 пикселя меньше в обоих измерениях от родительской панели. Каждая родительская панель имеет черный ForeColor, дающий эффект границы. Для каждой панели установлено значение DockStyle.Left, а общий размер элемента управления эквивалентен панели. Ширина * 7, панель. Высота.

1 голос
/ 07 января 2009

Это просто флажки.

...