Сочетания клавиш. Как только Вы выясняете, какие виды запросов Вы пишете много, запишите служебные хранимые процедуры, чтобы автоматизировать задачи и отобразить их на сочетания клавиш. Например, эта статья говорит о том, как постараться не вводить "избранные лучшие 10 * от SomeBigTable", каждый раз Вы хотите просто получить беглый взгляд на демонстрационные данные из той таблицы. У меня есть значительно расширенная версия этой процедуры, отображенной на CTRL + 5 .
еще много я имею:
... и еще много, которые не приходят на ум прямо сейчас. Некоторые из этих вещей могут быть сделаны через существующие интерфейсы в SSMS, но окна и виджеты SSMS могут быть, немного замедляют загрузку, особенно когда Вы запрашиваете против сервера через Интернет, и я предпочитаю не иметь необходимость взять руки от клавиатуры так или иначе.
Проектные решения, принятые в отношении того, как работает Windows Forms, более или менее исключают параметризованные .ctors для компонентов форм Windows. Вы можете их использовать, но когда вы это делаете, вы выходите за рамки общепринятых механизмов. Скорее, Windows Forms предпочитает инициализацию значений через свойства. Это допустимый метод проектирования, если он не используется широко.
Тем не менее, он имеет некоторые преимущества.
SplitContainer
) Вот. s также много поддержки в формах для правильной работы с дизайнером в этой технике. Такие вещи, как DefaultValueAttribute
, DesignerSerializationVisibilityAttribute
и BrowsableAttribute
, дают вам возможность предоставить расширенный клиентский опыт с минимальными усилиями.
(Это не единственное) Компромисс, который был сделан для взаимодействия с клиентом в формах Windows. Компоненты абстрактного базового класса тоже могут быть непростыми.)
Я бы посоветовал придерживаться конструктора без параметров и работать в рамках принципов проектирования форм Windows. Если есть реальные предварительные условия, которые ваш UserControl
должен обеспечить, инкапсулируйте их в другой класс, а затем назначьте экземпляр этого класса вашему элементу управления через свойство. Это также даст немного лучшее разделение проблем.
DefaultValueAttribute
, DesignerSerializationVisibilityAttribute
и BrowsableAttribute
, дают вам возможность предоставить расширенный клиентский опыт с минимальными усилиями.
(Это не единственное) Компромисс, который был сделан для взаимодействия с клиентом в формах Windows. Компоненты абстрактного базового класса тоже могут быть опасными.)
Я бы посоветовал придерживаться конструктора без параметров и работать в рамках принципов проектирования форм Windows. Если есть реальные предварительные условия, которые ваш UserControl
должен обеспечить, инкапсулируйте их в другой класс, а затем назначьте экземпляр этого класса вашему элементу управления через свойство. Это также даст немного лучшее разделение проблем.
DefaultValueAttribute
, DesignerSerializationVisibilityAttribute
и BrowsableAttribute
, дают вам возможность предоставить расширенный клиентский опыт с минимальными усилиями.
(Это не единственное) Компромисс, который был сделан для взаимодействия с клиентом в формах Windows. Компоненты абстрактного базового класса тоже могут быть непростыми.)
Я бы посоветовал придерживаться конструктора без параметров и работать в рамках принципов проектирования форм Windows. Если есть реальные предварительные условия, которые ваш UserControl
должен обеспечить, инкапсулируйте их в другой класс, а затем назначьте экземпляр этого класса вашему элементу управления через свойство. Это также даст немного лучшее разделение проблем.
BrowsableAttribute
дают вам возможность предоставить богатый клиентский опыт с минимальными усилиями.
(Это не единственный компромисс, который был сделан для взаимодействия с клиентом в формах Windows. Компоненты абстрактного базового класса могут стать непростыми тоже.)
Я бы посоветовал придерживаться конструктора без параметров и работать в рамках принципов проектирования форм Windows. Если есть реальные предварительные условия, которые ваш UserControl
должен обеспечить, инкапсулируйте их в другой класс, а затем назначьте экземпляр этого класса вашему элементу управления через свойство. Это также даст немного лучшее разделение проблем.
BrowsableAttribute
дают вам возможность предоставить богатый клиентский опыт с минимальными усилиями.
(Это не единственный компромисс, который был сделан для взаимодействия с клиентом в формах Windows. Компоненты абстрактного базового класса могут стать непростыми тоже.)
Я бы посоветовал придерживаться конструктора без параметров и работать в рамках принципов проектирования форм Windows. Если есть реальные предварительные условия, которые ваш UserControl
должен обеспечить, инкапсулируйте их в другой класс, а затем назначьте экземпляр этого класса вашему элементу управления через свойство. Это также даст немного лучшее разделение проблем.
Я бы посоветовал придерживаться конструктора без параметров и работать в рамках принципов проектирования форм Windows. Если есть реальные предварительные условия, которые ваш UserControl
должен обеспечить, инкапсулируйте их в другой класс, а затем назначьте экземпляр этого класса вашему элементу управления через свойство. Это также даст немного лучшее разделение проблем.
Я бы посоветовал придерживаться конструктора без параметров и работать в рамках принципов проектирования форм Windows. Если есть реальные предварительные условия, которые ваш UserControl
должен обеспечить, инкапсулируйте их в другой класс, а затем назначьте экземпляр этого класса вашему элементу управления через свойство. Это также даст немного лучшее разделение проблем.
Я бы порекомендовал
public partial class MyUserControl : UserControl
{
private int _parm1;
private string _parm2;
private MyUserControl()
{
InitializeComponent();
}
public MyUserControl(int parm1, string parm2) : this()
{
_parm1 = parm1;
_parm2 = parm2;
}
}
Так как в этом случае базовый конструктор всегда вызывается первым и любые ссылки на компоненты действительны.
Затем вы можете перегрузить общедоступный ctor, если это необходимо, обеспечивая элемент управления всегда создается с правильными значениями.
В любом случае вы гарантируете, что ctor без параметров никогда не вызывается.
Я не тестировал это, поэтому, если он упадет, прошу прощения!
Есть две конкурирующие парадигмы для разработки классов:
Конструктор Windows Forms Visual Studio заставляет вас предоставлять конструктор без параметров для элементов управления для правильной работы. На самом деле, конструктор без параметров требуется только для создания экземпляров элементов управления, но не для их разработки (дизайнер фактически анализирует метод InitializeComponent при разработке элемента управления). Это означает, что вы можете использовать конструктор для разработки формы или пользовательского элемента управления без конструктора без параметров, но вы не можете разработать другой элемент управления для использования этого элемента управления, потому что конструктор не сможет создать его экземпляр.
Если вы этого не сделаете. t намереваются программно создавать экземпляры ваших элементов управления (т.е. создавать пользовательский интерфейс «вручную»), а затем не беспокойтесь о создании параметризованных конструкторов, поскольку они не будут использоваться. Даже если вы собираетесь программно создавать экземпляры элементов управления, вы можете захотеть предоставить конструктор без параметров, чтобы при необходимости их можно было использовать в конструкторе.
Независимо от того, какую парадигму вы используете, также, как правило, неплохо поместите длинный код инициализации в метод OnLoad ()
, тем более что свойство DesignMode
будет работать во время загрузки, но не будет работать в конструкторе.
К сожалению, это проблема дизайна, которая будет возникать часто, а не только в области управления.
Часто возникают ситуации, когда вам нужен конструктор без параметров, даже если конструктор без параметров является не идеал. Например, для многих типов значений, IMO, было бы лучше без конструкторов без параметров, но невозможно создать конструктор, который работает таким образом.
В таких ситуациях вам нужно просто спроектировать элемент управления / компонент наилучшим образом. Использование разумных (и желательно наиболее распространенных) параметров по умолчанию может существенно помочь, поскольку вы можете хотя бы (надеюсь) инициализировать компонент с хорошим значением.
Кроме того, попробуйте спроектировать компонент таким образом, чтобы вы могли изменить эти свойства после создания компонента. С компонентами Windows Forms это обычно нормально,
Короче говоря, дизайнер - это тот парень, которому нравятся конструкторы без параметров. Итак, насколько мне известно, если вы действительно хотите использовать конструкторы на основе параметров, вы, вероятно, застряли в том или ином обходном пути.
Просто сделайте следующее:
public partial class MyUserControl : UserControl
{
public MyUserControl() : this(-1, string.Empty)
{
}
public MyUserControl(int parm1, string parm2)
{
// We'll do something with the parms, I promise
if (parm1 == -1) { ... }
InitializeComponent();
}
}
Тогда «настоящий» конструктор сможет действовать соответствующим образом.
Предоставьте конструктор без параметров для дизайнера и сделайте его закрытым - если вы действительно должны сделать это таким образом ...: -)
РЕДАКТИРОВАТЬ: Ну, конечно, это не сработает для UserControls. Я явно не думал ясно. Дизайнер должен выполнить код в InitializeComponent (), и он не может работать, если конструктор является частным. Прости за это. Однако он работает с формами.