Так что мой основной класс становился достаточно большим, поэтому я решил инкапсулировать рисунок дисплеев в свой собственный класс.
Затем в обработчике события OnPaint я вызываю displayDrawer.Draw();
Единственная проблема заключается в том, что для рисования чего-либо метод требует довольно много аргументов.
Например, есть четыре логических аргумента, определяющих флаги, которые влияют на рисование. Пример: рисовать или нет (не рисовать, если файл не загружен), оттенки, какие слои рисовать и так далее. Тогда, конечно, есть смещения, которые должны быть переданы. В зависимости от смещения горизонтальной и вертикальной полос прокрутки или ширины и высоты дисплея, ящик должен реагировать соответствующим образом.
Причина, по которой все они должны быть переданы, заключается в том, что у класса нет доступа к элементам управления формы. Я скорее не делаю элементы управления общедоступными и не предоставляю средства доступа, а также не хочу передавать форму.
Очевидный ответ - создать класс или структуру, заполненную такими значениями:
class Offsets
{
public int horizontal, vertical, displayWidth, displayHeight;
public Offsets(int horizontal, int vertical, int displayWidth, int displayHeight)
{
this.horizontal = horizontal;
this.vertical = vertical;
this.displayWidth = displayWidth;
this.displayHeight = displayHeight;
}
}
class DrawingFlags
{
public bool drawCurrentLayer, drawOtherLayers, drawDisplay;
public DrawingFlags(bool drawCurrentLayer, bool drawOtherLayers, bool drawDisplay)
{
this.drawCurrentLayer = drawCurrentLayer;
this.drawOtherLayers = drawOtherLayers;
this.drawDisplay = drawDisplay;
}
}
Но стоит ли все это того? Эти контейнеры будут когда-либо использоваться в программе только один раз во время вызова этого метода, а затем после этого придется просеять больше строк кода. Должен ли я просто прикусить пулю и признать, что этот единственный вызов метода имеет много параметров?