Vali Maties Ответов: 2

Проблема проектирования C# winforms datagridview


Привет.

Я создал класс, основанный на DataGridView. Я сделал все свои общие изменения дизайна в этом классе, используя VS designer, и я поместил этот DGV на каждую форму. Но теперь, если я внесу какие-либо изменения в свой DGV в своем классе, эти изменения не распространятся на все мои формы, потому что все мои начальные настройки уже хранятся в файлах form.Designer.cs.
Что я должен сделать, чтобы автоматически распространять какие-либо изменения в том, что MyDGV.CS, чтобы все мои формы, которая содержит, что dgv? Перестроечное решение этого не делает!

Спасибо!

Что я уже пробовал:

Восстановительное решение!
Я не знаю, что делать, но только удаляю любые данные о стилизации dgv в файле forms designer и перестраиваю решение.

2 Ответов

Рейтинг:
2

phil.o

У вас нет особого выбора, кроме как перекомпилировать сборку, содержащую элемент управления, и удалить уже назначенные данные стиля. Конструктор использует файл *.Designer.cs для сериализации настроек элементов управления; когда вы изменяете поведение/стиль пользовательского элемента управления, конструктор не сравнивает старые настройки с новыми, а просто сохраняет настройки, которые он сериализовал.

В идеале, вы должны позаботиться о реализации элемента управления раз и навсегда; только когда это будет сделано, вы должны начать использовать его в своих формах. Если вы будете постоянно переходить от реализации вашего элемента управления к его использованию, это быстро станет настоящим кошмаром (особенно если элемент управления используется во многих местах).


Vali Maties

Возможно, мне придется сделать эти пользовательские свойства моего dgv общедоступными свойствами get-set со значением по умолчанию и считывать их из файла настроек при загрузке формы. Я думаю, что это тот подход, которому я должен следовать.

phil.o

В идеале, если вы хотите, чтобы эти пользовательские свойства отображались в таблице свойств, они уже должны быть общедоступными get-set. Присвоение им значения по умолчанию будет отражено только при создании нового экземпляра элемента управления (во время разработки); существующие экземпляры не будут обновляться при изменении значения по умолчанию.
Чтение из файла настроек всегда возможно, но 1) он может конфликтовать с файлом .Designer.cs (целью которого является именно сериализация определенных настроек элемента управления) 2) он не решит вашу проблему, так как настройки будут просто считаны откуда-то еще.
Как я уже говорил, постарайтесь сначала сосредоточиться на развитии вашего контроля и только тогда начинайте использовать его, когда этот первый этап будет завершен.

Рейтинг:
2

OriginalGriff

Если ваши экземпляры формы вашего элемента управления переопределяют значения по умолчанию вашего элемента управления, то они всегда будут использоваться в предпочтении к любым новым значениям по умолчанию, которые добавляет ваш элемент управления, - и это действительно не должно быть никаким другим способом, если вы подумаете об этом!

Если я создаю элемент управления с красным фоном и в своей форме меняю его на синий, то я хочу, чтобы этот фон оставался синим, даже если позже я изменю элемент управления на желтый фон - любое другое поведение, вероятно, будет представлять собой "критическое изменение", поскольку оно не приведет к тому же пользовательскому опыту, что и без каких-либо изменений в моем коде формы.

Если это не то, что происходит здесь, то вам нужно объяснить гораздо более подробно, в чем именно заключается проблема, поскольку мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы понятия не имеем, как выглядит ваш код!


Vali Maties

Привет @OriginalGriff. Я не думаю, что речь идет о чтении моих мыслей или о чем-то еще, это написано в моем вопросе: [quote][i]я сделал все свои общие изменения дизайна в этом классе, используя VS designer, и я поместил этот DGV на каждую форму[/i][/quote]. Это означает, что после того, как я сделал свой класс и сделал дизайн для своей сетки (selectionbackcolor, selectionforecolor и так далее), я поместил его на свои формы. Проблема в том, что дизайнер скопирует эту информацию в мой файл form Designer.cs, что я не думаю, что это нормально, до тех пор, пока я не внесу никаких локальных изменений в эту форму в свой dgv.
Итак, моя трудность заключалась в том, что если я сделаю какой-то стиль в файле cs, то эти свойства стиля будут считываться из моего пользовательского файла до тех пор, пока я не изменю его локально. Но этого не происходит, что, на мой взгляд, является чем-то вроде маленького/большого жука. Я не знаю, это очень трудно...