Блокировка элементов списка, компонента «CheckedListBoxControl» от производителя «DevExpress».

      В данном статье рассмотрен пример блокировки элементов списка, компонента «CheckedListBoxControl» от производителя «DevExpress». Данный элемент управления представляет симбиоз компонентов ListBox и CheckBox. Для каждого элемента такого списка определено специальное поле CheckBox, которое можно отметить.
      Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на форму компонент «CheckedListBoxControl».
      Выполните двойной клик по свободному пространству главной формы. Вы перейдете в редактор кода с автоматически созданным методом «Form1_Load».
      Добавьте в тело данного метода приведенный ниже код, заполнения элемента управления «checkedListBoxControl1» тестовыми данными.
//Заполняем checkedListBoxControl1
//тестовыми данными
for (int i = 0; i == 10; i++ )
    checkedListBoxControl1.Items.Add(i);
      Перейдите в конструктор главной формы и выберете элемент управления «checkedListBoxControl1». Сделайте по нему клик правой клавиши мыши и выберете из открывшегося контекстного меню, пункт «Свойства».
      Перейдите в события данного элемента управления, нажав в верхней части окна свойств, на значок молнии и найдите событие «GetItemEnabled». Выполните по нему двойной клик левой клавишей мыши.
      Вы перейдете в редактор кода с автоматически созданным методом «checkedListBoxControl1_GetItemEnabled», добавьте приведенный ниже код блокировки четных записей списка.
DevExpress.XtraEditors.CheckedListBoxControl control =
    sender as DevExpress.XtraEditors.CheckedListBoxControl;
if ((e.Index % 2) == 0)
{
    e.Enabled = false;
}
else
    e.Enabled = true;
      Запустите ваш проект, нажав на клавишу «F5». Вы увидите, что все четные элементы списка будут заблокированы.
      Вы можете так же вывести картинку напротив заблокированных пунктов. Для этого перейдите в свойства вашего проекта и выберете раздел «Ресурсы». В верхней части формы данного окна вы увидите кнопку «Добавить ресурс» с выпадающим списком, нажмите на нее и выберете пункт «Добавить существующий файл…».
      У вас откроется окно «Добавить существующий файл к ресурсам». Выберете нужную вам картинку и нажмите на кнопку «Открыть». В ресурсы вашего проекта будет добавлено выбранное вами изображение.
      Перейдите в события элемента управления «checkedListBoxControl1» и найдите событие «DrawItem». Выполните по нему двойной клик левой клавишей мыши. Вы перейдете в автоматически созданный метод «checkedListBoxControl1_DrawItem». Вставьте в него приведенный ниже листинг.
if ((e.Index % 2) == 0)
{
    DevExpress.XtraEditors.ViewInfo.CheckedListBoxViewInfo cInfo =
        (DevExpress.XtraEditors.ViewInfo.CheckedListBoxViewInfo)checkedListBoxControl1.GetViewInfo();
    Size checkBoxSize = cInfo.CheckMarkSize;
    //Выводим изображение добавленное в ресурсы проекта
    e.Graphics.DrawImage(checkedListBoxControl1_ItemEnabled.Properties.Resources.alert,
        new Rectangle(e.Bounds.X, e.Bounds.Y, checkBoxSize.Width, checkBoxSize.Height));
    //Изменяем шрифт 
    e.Graphics.DrawString(e.Item.ToString(),
                          e.Appearance.Font = new Font(e.Appearance.Font.FontFamily,
                                                       e.Appearance.Font.Size, 
                                                       FontStyle.Strikeout),
                         e.Cache.GetSolidBrush(Color.Silver), 
                        new Point(checkBoxSize.Width + e.Bounds.X, e.Bounds.Y));                
    e.Handled = true;               
}
      Запустите ваш проект, нажав на клавишу «F5». Вы увидите, что все записи с четными номерами будут заблокированы и рядом с ними будет отображаться изображение которое вы добавили в ресурсы вашего проекта.
      Так же можно добавить подсказку на заблокированные элементы. Для этого добавьте на главную форму вашего проекта из панели элементов, элемент управления «ToolTipController».
      Перейдите в события элемента управления «checkedListBoxControl1» и найдите событие «MouseMove». Выполните по нему двойной клик левой клавишей мыши. Вы перейдете в автоматически созданный метод «checkedListBoxControl1_MouseMove». Данное событие возникает каждый раз, когда вы наводите курсор на один из элементов списка. Вставьте в тело данного метода приведенный ниже код.
DevExpress.XtraEditors.CheckedListBoxControl checkedListBoxControl = 
       sender as DevExpress.XtraEditors.CheckedListBoxControl;
int index = checkedListBoxControl.IndexFromPoint(new Point(e.X, e.Y));
if (index != -1)
{
    if ((index % 2) == 0)
    {
        string item = checkedListBoxControl.GetItem(index) as string;

        toolTipController1.ShowHint("Пункт является четным в списке!",
            checkedListBoxControl.PointToScreen(new Point(e.X, e.Y)));
    }
    else
        toolTipController1.HideHint();
}
else
{
    toolTipController1.HideHint();
}
      Выполните те же действия для события «MouseLeave», которое возникает, когда указатель мыши покидает границы элемента управления. Добавьте приведенный ниже код скрытия подсказки.
toolTipController1.HideHint();
      Запустите ваш проект, нажав на клавишу «F5» и наведите курсор на заблокированную запись. У вас появится подсказка с текстом, который вы задали. Если вы переместите курсор на не блокированную запись, то подсказка исчезнет.

Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!