none
Старт wizard'a при добавлении компонента на форму RRS feed

  • Вопрос

  • Всем доброго времени суток.

    Меня интересует вопрос: как можно при добавлении определенного компонента на форму запустить wizard и настроить в нем определенные свойства компонента?


    • Изменено akavoid 19 июня 2012 г. 3:26
    19 июня 2012 г. 2:32

Ответы

  • Вам придется написать addin, который будет отслеживать перемещение компонентов на форму. Обнаружив перемещение нужного компонента, он будет открывать написанный выми и содержащийся в нем мастер, который будет запрашивать значения полей.

    Если хотите, то вот вам мой совет. Напишите код, который для заданного компонента настраивает все поля значениями по умолчанию, а потом выделив его мышкой перетащите в toolbox. Теперь, перетащив на форму компонент, вы можете перейти в код формы и, например, в конструктор добавить инициализацию параметров просто перетащив из toolbox-а нужный фрагмент кода в конструктор. Второй вариант, мне он даже больше нравится, для генерации кода инициализации компонента написать snippet. Второй вариант сложнее в реализации, зато потом по кнопке Tab сможете переходить между значениями которые нужно заполнить.

    Как то так...


    19 июня 2012 г. 4:42
    Отвечающий
  • У вас же компоненты которые вы хотите кидать на форму сделаны на основе UserControl? Ну и пропишите у них свойства (property), которые будут настраивать свойства вложенных компонентов. Соответственно, настройка будет идти только самого UserControl-а, на уровне его свойств.

    Давайте простой пример.

    1. Добавляю в решение новый userControl.

    2. Кидаю в него label.

    3. Пишу в коде UserControl-а вот такое свойство:

    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }
        public string Header
        {
            set
            {
                label1.Text = value;
            }
            get
            {
                return label1.Text;
            }
        }
    }

    4. Кидаю свой userControl на форму.

    5. В коде формы пишу что то такое:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // Инициализация свойств контрола
            userControl11.Header = "Привет!";
        }
    }

    Если теперь запустить приложение, т о в label-е который в usercontrol-е будет текст "Привет!".

    Собственно, если код инициализации свойств вынести в snippet, сделав заполняемыми пользователем сеиппета: имя компонента, значения свойства Header (в данном случае "Привет!"), то кинув на форму UserControl и вызваз snippet, мне надо будет для 10 свойств ввести 1 раз имя компонента на форме и 10 значений свойств. Все получается легко и быстро...

    • Помечено в качестве ответа akavoid 19 июня 2012 г. 7:19
    19 июня 2012 г. 6:14
    Отвечающий
  • 1. addin содержит код на языке c#, в нем могут быть формы, и все что вам надо.

    2. Напишите в любом месте кода if и сразу (без пробела) нажми Tab. Появится сгенерированный фрагмент кода, в котором будет предложено дописать небольшую часть (таких snippet-ов достаточно много: for, case, #region и т.д.). По ссылке выше написано, в том числе и о том, как создать свой snippet.

    • Помечено в качестве ответа akavoid 19 июня 2012 г. 5:53
    • Снята пометка об ответе akavoid 19 июня 2012 г. 5:54
    • Помечено в качестве ответа akavoid 19 июня 2012 г. 5:55
    19 июня 2012 г. 5:43
    Отвечающий
  • Я так понимаю мне надо писать addin или есть способ сделать это проще? 

    Ну как по мне проще открыть окно "Свойства" после добавления элемента на форму и указать все что нужно, но если вам принципиально делать это "мастером", то нужно писать свой аддон, так как только вам известно какие именно свойства должны правится мастером, а какие нет.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Abolmasov Dmitry 20 июня 2012 г. 8:45
    19 июня 2012 г. 3:29

Все ответы

  • Не припомню что бы хотя бы в одной из версий VisualStudio было что то подобное. При добавлении элемента на форму он добавляется со свойствами по умолчанию, а вы потом правите их окне "Свойство" или в коде.

    Да и какого рода должен быть такой wizard? По каждому свойству отдельное окошко... а когда свойств 50, вы не устанете жать "Далее"?


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    19 июня 2012 г. 3:06
  • Есть форма перемещенная в toolbox студии как компонент.  Все свойства и события у нее стандартной формы из windows forms.

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

    Я искал материал по этому вопросу, но нашел только создание wizard'а при создании самого проекта и при добавлении new item'a в сам проект.

    Я так понимаю мне надо писать addin или есть способ сделать это проще? 

    19 июня 2012 г. 3:24
  • Да, придется писать addin.
    19 июня 2012 г. 3:29
    Отвечающий
  • Я так понимаю мне надо писать addin или есть способ сделать это проще? 

    Ну как по мне проще открыть окно "Свойства" после добавления элемента на форму и указать все что нужно, но если вам принципиально делать это "мастером", то нужно писать свой аддон, так как только вам известно какие именно свойства должны правится мастером, а какие нет.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Abolmasov Dmitry 20 июня 2012 г. 8:45
    19 июня 2012 г. 3:29
  • Только аддин или к нему еще дополнительно wizard?
    19 июня 2012 г. 3:42
  • Я наверное не так выразился. Та форма, которая перемещена на компонент, она не пустая, на ней есть другие компоненты: гриды, кнопки, и.т.д. . 

    Их свойства можно как то изменять wizard'ом?

    19 июня 2012 г. 3:49
  • Вам придется написать addin, который будет отслеживать перемещение компонентов на форму. Обнаружив перемещение нужного компонента, он будет открывать написанный выми и содержащийся в нем мастер, который будет запрашивать значения полей.

    Если хотите, то вот вам мой совет. Напишите код, который для заданного компонента настраивает все поля значениями по умолчанию, а потом выделив его мышкой перетащите в toolbox. Теперь, перетащив на форму компонент, вы можете перейти в код формы и, например, в конструктор добавить инициализацию параметров просто перетащив из toolbox-а нужный фрагмент кода в конструктор. Второй вариант, мне он даже больше нравится, для генерации кода инициализации компонента написать snippet. Второй вариант сложнее в реализации, зато потом по кнопке Tab сможете переходить между значениями которые нужно заполнить.

    Как то так...


    19 июня 2012 г. 4:42
    Отвечающий
  • он будет открывать написанный выми и содержащийся в нем мастер,

    Я немного не понимаю, как может addin содержать мастер?

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

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

    19 июня 2012 г. 5:29
  • 1. addin содержит код на языке c#, в нем могут быть формы, и все что вам надо.

    2. Напишите в любом месте кода if и сразу (без пробела) нажми Tab. Появится сгенерированный фрагмент кода, в котором будет предложено дописать небольшую часть (таких snippet-ов достаточно много: for, case, #region и т.д.). По ссылке выше написано, в том числе и о том, как создать свой snippet.

    • Помечено в качестве ответа akavoid 19 июня 2012 г. 5:53
    • Снята пометка об ответе akavoid 19 июня 2012 г. 5:54
    • Помечено в качестве ответа akavoid 19 июня 2012 г. 5:55
    19 июня 2012 г. 5:43
    Отвечающий
  • Ну я понял, что это. А как использовать? мне не очень понятно.

    Я должен создать сниппеты для каждого компонента моего компонента? И для каждого свойства компонента моего компонента?


    • Изменено akavoid 19 июня 2012 г. 7:22
    19 июня 2012 г. 5:55
  • У вас же компоненты которые вы хотите кидать на форму сделаны на основе UserControl? Ну и пропишите у них свойства (property), которые будут настраивать свойства вложенных компонентов. Соответственно, настройка будет идти только самого UserControl-а, на уровне его свойств.

    Давайте простой пример.

    1. Добавляю в решение новый userControl.

    2. Кидаю в него label.

    3. Пишу в коде UserControl-а вот такое свойство:

    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }
        public string Header
        {
            set
            {
                label1.Text = value;
            }
            get
            {
                return label1.Text;
            }
        }
    }

    4. Кидаю свой userControl на форму.

    5. В коде формы пишу что то такое:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // Инициализация свойств контрола
            userControl11.Header = "Привет!";
        }
    }

    Если теперь запустить приложение, т о в label-е который в usercontrol-е будет текст "Привет!".

    Собственно, если код инициализации свойств вынести в snippet, сделав заполняемыми пользователем сеиппета: имя компонента, значения свойства Header (в данном случае "Привет!"), то кинув на форму UserControl и вызваз snippet, мне надо будет для 10 свойств ввести 1 раз имя компонента на форме и 10 значений свойств. Все получается легко и быстро...

    • Помечено в качестве ответа akavoid 19 июня 2012 г. 7:19
    19 июня 2012 г. 6:14
    Отвечающий
  • спасибо большое.
    19 июня 2012 г. 7:21
  • к сожалению сниппеты не подходят.

    Можно вам тогда задать последний вопрос, я ни как не пойму, как с помощью мастера добавить новый элемент(винформу) в уже существующий проект. Не поможите ссылочкой?

    Заранее спасибо.

    19 июня 2012 г. 9:08
  • Вам же ответили выше что стандартным способом никак. Нужно создавать свое дополнение к Visual Studio. Для этого в окне создания нового проекта выберите слева пункт "Другие типы проектов > Расширение среды" а там "Надстрока Visual Studio".


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Изменено LXGDARK 19 июня 2012 г. 9:13
    19 июня 2012 г. 9:13
  • к сожалению сниппеты не подходят.

    Можно вам тогда задать последний вопрос, я ни как не пойму, как с помощью мастера добавить новый элемент(винформу) в уже существующий проект. Не поможите ссылочкой?

    Заранее спасибо.


    Не очень понял ваш вопрос. Если вам в уже имеющийся проект надо добавить стандартными средствами новую форму, то правый клик на проекте, затем Add->New Item и в открывшемся окне ищите тот тип элемента который хотите добавить...
    19 июня 2012 г. 9:16
    Отвечающий
  • Вам же ответили выше что стандартным способом никак


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    Извиняюсь по ходу не верно понял ваш вопрос, так как вопросов в топике уже многовато. Смотрите ответ Алексея.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    19 июня 2012 г. 9:18
  • Вы оба не правильно поняли.

    Так как сниппеты не подходят, я решил использовать другой ответ Алексея, а именно:

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

    Так вот я приступил к созданию мастера,(для треннировочки, пока что Мастера добавления нового элемента или add new item wizard)

     Так как в msdn в пример приводится добавление app.config'а я немного замешкался по поводу того как добавить именно вин форму.

    Мне очень жаль, что я, как бы нафлудил в топике вопросами, но это последнее, что я хотел спросить.




    • Изменено akavoid 19 июня 2012 г. 9:36
    19 июня 2012 г. 9:32
  • Мне очень жаль, что я, как бы нафлудил в топике вопросами, но это последнее, что я хотел спросить.

    Так вы разобрались в конечном счете или нет?

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    19 июня 2012 г. 9:43
  • Я собирался использовать сниппеты(как мне советовал Алексей), но мне сказали что такое решение не подходит, нужен именно мастер.

    Потому я решил воспользоваться еще одним предложением Алексея, которое указал выше.

    Все что мне нужно, так это всего то с помощью мастера добавить в проект любую форму(пусть даже пустую) что бы понять процесс.

    И дальше уже писать addin

    19 июня 2012 г. 9:57
  • Так в том то и гвоздь что нет такого мастера. Есть диалоговое окно, где вы выбираете элемент который нужно добавить и все.

    Кстати при создании Надстроки Visual Studio как на картинке выше, появляется мастер создание проекта. Может он вас вдохновит.

    А вообще конечно я уже запутался что конкретно вы хотите сделать в данный момент... Если не секрет зачем вам создавать такой мастер, какую практическую пользу вы от него хотите получить. Для единичного проекта многовато гемороя. Подобные задачи все таки ставятся, когда планируешь выполнять одно и то же действие много раз...


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    19 июня 2012 г. 10:02
  • Вот здесь почитайте про объектную модель и вообще какие мастера бывают.
    19 июня 2012 г. 10:05
    Отвечающий
  • К сожалению не я сам себе  ставлю задачи. Да и опыта мало у меня что бы спорить.

    Есть в проекте форма, ее как бы часто хотят использовать. Дали мне задание что бы я сделал так сказать автоматизацию.

    Алексей я правильно понял, что могу создать только мастер который может просто генерировать определенный код. А такие мастера как add new item и add new project мне не доступны? И для того что бы так сказать осуществить эту идею, мне нужно писать addin который работает уже с существующими шаблонами форм, и уже существующими мастерами?

    PS

    Там где я работаю используют devexpress, и видимо его возможность настраивать проект при создании привела к этому заданию.

    PPS

    Вот меня спрашивают, почему если я могу создать app.config я не могу создать форму, ведь форма это класс...


    • Изменено akavoid 19 июня 2012 г. 10:51
    19 июня 2012 г. 10:35
  • Я, если честно addin-ы не писал, читал в свое время книжку про них (с ходу не нашел, но целая книжка как писать расширения для VS). Судя по статье которую я вам дал, вы можете создать Custom Wizard в котором на проекте вызовите AddTemplate и добавите форму, которую предварительно должны сохранить как шаблон Visual Studio.
    19 июня 2012 г. 10:49
    Отвечающий
  • Спасибо еще раз.
    20 июня 2012 г. 2:01