Вполне вероятно, что я все делаю неправильно, но у меня есть пользовательский элемент управления под названием CategoryControl, их может быть много, поэтому я решил, что многие из его функций лучше использовать в качестве статических методов.Я хотел знать, есть ли «лучший» способ доступа к этим методам, чем передача экземпляра по всему классу.Методы являются общедоступными, поскольку они будут обновляться другими методами.Мысль о создании методов расширения приходит на ум ..?
public CategoryControl(UserCategory userCategory)
{
InitializeComponent();
PopulateControl(userCategory, this);
}
private static void PopulateControl(UserCategory userCategory, CategoryControl instance)
{
SetCategoryTitle(userCategory, instance);
SetPercentCorrect(userCategory, instance);
SetQuestionsMissed(userCategory, instance);
SetBackgroundBar(userCategory, instance);
SetForegroundBar(userCategory, instance);
}
Обновлено ::
Чем длиннее история, тем больше у меня панели на экранеПанель содержит соответствующие категории пользователей.Под релевантным я подразумеваю, что у пользователя есть возможность менять курсы, отображая новый набор категорий.Пользователь также может изменить значения категории в зависимости от их взаимодействия с программным обеспечением.Итак ...
На панели отображаются категории курса.
Я поддерживаю список активных элементов управления категориями на панели, а основная форма сообщает панели, когда рисовать новыйнабор категорий.
public void InitializeProgressPanel(UserCategories parentCategories)
{
Contract.Requires(parentCategories != null, "parentCategories is null.");
RemoveAllControlsFromList(_categoryControls);
UserCategories sortedUserCategories = parentCategories.SortByWorst();
int categoriesCount = parentCategories.Count();
int spacer = (Height - (CategoryControl.Controls_Height * categoriesCount)) / categoriesCount+1;
for (int i = 0; i < sortedUserCategories.Count; i++)
{
CategoryControl cc = new CategoryControl((UserCategory)sortedUserCategories[i]);
cc.Left = 0;
if (i == 0)
cc.Top = spacer;
else
cc.Top = (Controls[i - 1].Bottom + spacer);
Controls.Add(cc);
_categoryControls.Add(cc);
}
}