У меня тоже были проблемы с попыткой создать настоящие многократно используемые фрагменты кода в моих проектах winforms.
Тогда мне удалось более или менее достичь этой цели с помощью UserControls, но иногда это бывает громоздко, потому что часто требуется много свойств / методов для подкласса, когда он предназначен для повторного использования в различных проектах с совершенно другим макетом .
Именно поэтому я использую классы Helper, которые устанавливают некоторые свойства элементов управления, таким образом передавая элемент управления в параметре. Например:
void SetupEditableGrid(UltraGrid myGrid)
{
myGrid.BackColor...
}
Кроме того, для самых сложных объектов, требующих дополнительной работы, я использую классы контроллеров, связанные с некоторыми конкретными элементами управления. Например, я использую MyEditableUltraGridController для подготовки полностью изменяемого UltraGrid необработанного Infragistic.
public class MyEditableUltraGridController()
{
UltraGrid _myGrid;
public MyEditableUltraGridController(UltraGrid myGrid)
{
_myGrid = myGrid;
_myGrid.InitializeLayout += ... // some common initialization code
_myGrid.KeyPressed += ... // some keystroke handling code
... etc ...
}
void InitializeLayout(object sender, EventArgs e)
{
... some specific UltraGrid common initialization code
}
... // some code that make my UltraGrid editable, etc...
}
Тогда, учитывая существующий элемент управления UltraGrid1 в моей форме, у меня будет:
Form_Load(object sender, EventArgs e)
{
var MyEditableUltraGridController =
new MyEditableUltraGridController(UltraGrid1);
}
Я чувствую себя комфортно с этим подходом, основанным на уроках, потому что он позволяет мне поддерживать удобное управление и хорошую гибкость.