Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > автоматизация управления интерфейсом


Автор: nmn 9.5.2009, 14:13
есть ли в C# механизмы автоматизации управления(активация, деактивация и др) интерфейсом? вручную при наличии большого количества элементов неудобно

Автор: Partizan 9.5.2009, 17:05
nmn, чьим интерфейсом? своим? чужим?

Автор: nmn 9.5.2009, 19:31
своим

Автор: Springtime 10.5.2009, 10:36
А более поконкретней можно что необходимо?

Автор: DVariuS 10.5.2009, 14:03
Я так подозреваю, что элементы необходимо поместить, скажем, на панель и активировать/деактивировать панель.

Автор: -Mikle- 10.5.2009, 14:19
nmn, тебе что, лень на кнопки нажимать? Опиши что тебе нужно нормально, почему ты считаешь что выражаешься нормальным языком? 
Цитата(nmn @  9.5.2009,  17:13 Найти цитируемый пост)
автоматизации управления(активация, деактивация и др) интерфейсом

вот это ну ни о чем не говорит... Вот ты же себе хуже делаешь таким образом, вместо того чтобы получить нужный ответ уже в первом же топике, время твое уэодит на то, что бы потом пояснять народу что ты имел ввиду. Лучше потрать максимум 3-7 минут на описание того что тебе нужно, вместо того, чтобы ждать долго ответ  smile  Кстати уже сутки прошли, а ответ тебе никто не дал.

Автор: nmn 12.5.2009, 13:06
извинте, что так долго не отвечал, не было доступа к сети

в кратце то что я хочу:

У приложения могут быть несколько состояний. В каждом состоянии активны только некоторые функции приложения (кнопки, списки, элементы меню и др.), остальные же нужно заблокировать; в другом состоянии активные элементы меняются, добавляются новые, убираются старые. Каждый раз менять вручную довольно утомительно, есть ли встроенный механизм автоматизации данных действий?

Автор: Partizan 12.5.2009, 20:15
nmn, ну как...пишешь код - получаешь результат smile Вот тебе и автоматизация =)

Можно сделать класс-модельку и свойства контролов типа Enabled, Visible и т.д. забиндить на свойства модельки...

Автор: -Mikle- 12.5.2009, 20:56
Пока есть время, предваряю следующий вопрос и приведу реализованный пример идеи Partizan.

Этот класс имеет три свойства типа bool: State1, State2 и State3. Названия выбраны для примера и их кол-во тоже. На практике лучше дать другие, смысловые названия и их кол-во не ограничено.
Код

    class UIAutomizer : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        void OnPropertyChanged(string propName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }

        bool _state1;
        public bool State1
        {
            get { return _state1; }
            set
            {
                if (_state1 == value) return;
                _state1 = value;
                // !!! эта важная строчка
                OnPropertyChanged("State1");
            }
        }

        bool _state2;
        public bool State2
        {
            get { return _state2; }
            set
            {
                if (_state2 == value) return;
                _state2 = value;
                // !!! эта тоже важная строчка
                OnPropertyChanged("State2");
            }
        }

        bool _state3;
        public bool State3
        {
            get { return _state3; }
            set
            {
                if (_state3 == value) return;
                _state3 = value;
                // !!! ну и эта само собой
                OnPropertyChanged("State3");
            }
        }
    }


Для примера-проверки сделаем формочку и кинем на нее 8 кнопок и три CheckBox.
Пропишем вот такой вот код:
Код

    public partial class Form1 : Form
    {
        UIAutomizer uiAutomizer;

        public Form1()
        {
            InitializeComponent();

            uiAutomizer = new UIAutomizer();

            // Привязываем некоторые контролы к свойству State1.
            button1.DataBindings.Add("Enabled", uiAutomizer, "State1");
            button7.DataBindings.Add("Visible", uiAutomizer, "State1");

            // а эти к свойству State2
            button2.DataBindings.Add("Enabled", uiAutomizer, "State2");
            button4.DataBindings.Add("Visible", uiAutomizer, "State2");
            button5.DataBindings.Add("Enabled", uiAutomizer, "State2");
            button8.DataBindings.Add("Enabled", uiAutomizer, "State2");

            // эти к свойству State3
            button3.DataBindings.Add("Enabled", uiAutomizer, "State3");
            button6.DataBindings.Add("Visible", uiAutomizer, "State3");
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            // меняем свойство State1 автомайзера
            uiAutomizer.State1 = checkBox1.Checked;
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            // меняем свойство State2 автомайзера
            uiAutomizer.State2 = checkBox2.Checked;
        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            // меняем свойство State3 автомайзера
            uiAutomizer.State3 = checkBox3.Checked;
        }


Вуаля! Привязывать можно любые свойства типа bool любых контролов (кнопки, пункты меню и т.д.).

Автор: jonie 14.5.2009, 09:26
вообще говоря есть такой паттерн: http://www.rsdn.ru/article/patterns/State.xml

Автор: -Mikle- 15.5.2009, 08:01
Цитата(jonie @  14.5.2009,  12:26 Найти цитируемый пост)
вообще говоря есть такой паттерн

Приведи пример его использования в данном случае.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)