Главная » C#, Компоненты » Модальный диалог

0

Отображение модального диалога подразумевает отображение некой формы, в которой производится редактирование значения свойства. Для свойства Position компонента MinMaxControl такая форма может выглядеть как на рис. 9.9. Щелчок на прямоугольнике (на самом деле это компонент PositionEditorControi) устанавливает новое значение, кнопка Сохранить сохраняет изменения, а кнопка Отмена оставляет старое значение свойства. Код формы очень простой (листинг 9.4). В конструкторе производится инициализация свойств формы, а свойство Position позволяет получить новое значение.

Для отображения формы используется метод showModai (), как показано в листинге 9.5. Код достаточно простой и почти полностью совпадает с тем, который мы уже обсуждали, поэтому я не буду останавливаться на нем дополнительно.

Рис. 9.9. Форма для редактирования свойства Position

Листинг 9 4 Форма редактирования шоистна ? si1-! ч.

using System;

using System.Collections.Generic;

us ing Sys tem.ComponentMode1;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace MyControl E

public partial class PositionEditForm : Form public int Position

E

get

E

return positionEditorControl.Position;

}

set

E

positionEditorControl.Position = value;

}

}

public PositionEditForm(MinMaxControl control)

E

InitializeComponent();

Теперь редактирование свойства Position будет производиться с помощью модального диалога.

positionEditorControl.Min = control.Min; positionEditorControl.Max = control.Max;

PositionEditorControl.Position = control.Position;

}

}

1

Листинг 9 5 Редактор для редактировании свойства l’oriLiuz.

using System;

using System.Collections.Generic; using System.Text; using System.Drawing.Design; using System.ComponentModel; using System.Windows.Forms.Design; using System.Windows.Forms;

namespace MyControl

{

class PositionUIEditor : UITypeEditor

{

private IWindowsFormsEditorService edSvc = null;

// Стиль редактора — модальный диалог

public override UITypeEditorEditStyle GetEditStyle(

System. ComponentModel.ITypeDescriptorContext context)

{

return UITypeEditorEditStyle.Modal;

}

public override object EditValue(ITypeDescriptorContext context,

IServiceProvider provider, object value)

{

if (context != null &&

context.Instance != null && provider != null)

{

// Получаем интерфейс сервиса edSvc = (IWindowsFormsEditorService)

provider.GetService(typeof(IWindowsFormsEditorService));

if (edSvc != null) {

// Текущий редактируемый компонент MinMaxControl currentControl =

context.Instance as MinMaxControl;

// Создаем форму для редактирования using (PositionEditForm form =

new PositionEditForm{currentControl}}

{

// Вызываем модальный диалог

if {edSvc.ShowDialog(form) == DialogResult.OK) {

// Получаем новое значение value = form.Position;

}

}

}

}

// Возвращаем либо старое, либо новое значение return value;

}

}

}

Литература:

Агуров П. В. C#. Разработка компонентов в MS Visual Studio 2005/2008. – СПб.: БХВ-Петербург, 2008. — 480 е.: ил.

По теме:

  • Комментарии