Интерактивный пользовательский контроль времени разработки - PullRequest
2 голосов
/ 19 февраля 2010

Я прошу прощения, если название было запутанным, мне потребовалось почти 5 минут, чтобы наконец придумать название для этого ...

Хорошо, вы знаете, как в Visual Studio Express добавить TabControl в форму, и вы можете нажать на стрелку вправо в правом верхнем углу TabControl, и она добавит новый TabPage или удалить один?

Ну, я создаю пользователя Control, где мне нужны люди, чтобы иметь возможность переключаться между панелями (мой пользовательский элемент управления состоит из нескольких панелей). Я знаю, что это возможно, поскольку в прошлом я использовал ленту Control, и вы могли добавлять новые кнопки и т. Д. В режиме конструктора.

Может ли кто-нибудь дать какие-либо предложения / советы о том, как мне добиться этого?

Спасибо

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

Если я правильно понимаю ваш вопрос, вы говорите о смарт-тегах .

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

(Примечание. Термин «смарт-теги» имеет два разных значения в Visual Studio - я специально говорю о смарт-тегах визуального дизайнера, а не смарт-тегах в редакторе кода).

0 голосов
/ 19 февраля 2010

Когда вы создаете элемент управления, унаследованный от Control, вы должны использовать пару свойств, таких как IsDesignMode, затем вы можете создавать обработчики событий специально для режима разработки:

if (IsDesignMode){
   // Handle the interactivity in Design mode, such as changing a property on the
   // Properties toolbox
}

Предположим, что у элемента управления есть событие, например MouseClick, вы можете сделать это:

private void control_MouseClick(object sender, MouseEventArgs e){
   if (IsDesignMode){
       // Do something here depending on the Click event within the Designer
   }else{
       // This is at run-time...
   }
}

Другое, о чем я могу думать, это ' ShouldSerialize ', за которым следует общедоступное свойство, чтобы сохранить свойство в сгенерированном дизайнером коде, предположим, например, что элемент управления имеет логическое свойство Foo

public bool Foo{
    get{ return this._foo; }
    set{ if (this._foo != value){ 
                this._foo = value; 
         }
       }
}

public bool ShouldSerializeFoo(){
    return true; // The property will be persisted in the designer-generated code
                 // Check in Form.Designer.cs...
}

Если ShouldSerializeFoo вернул false, свойство не сохраняется, наоборот, когда true, оно будет скрыто в коде Form.Designer.cs ...

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...