.NET 8 в Winforms удаляет код в Designer.cs, как этого избежать?C#

Место общения программистов C#
Ответить
Anonymous
 .NET 8 в Winforms удаляет код в Designer.cs, как этого избежать?

Сообщение Anonymous »

У нас есть проект Winforms, обновленный до .NET 8. При преобразовании было лишь несколько проблем, которые можно было легко исправить, поэтому мы продолжили идти по этому пути.

Однако теперь я обнаружил проблему, которую Подозреваемый — это ошибка в конструкторе Winforms в .NET 8.
У меня есть пользовательский элемент управления, и панель этого элемента управления помечена как «зона перетаскивания», поэтому вы можете переместить элементы управления в этот пользовательский элемент управления. управление в дизайнере. Это работало хорошо до перехода на .NET 8.
Вот фрагмент кода пользовательского элемента управления:

Код: Выделить всё

[Designer(typeof(UserControlDesigner))]
[Serializable]
public partial class gttDXGridDashboard : UserControl
{
// define a property called "DropZone"
[Category("Appearance")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public PanelControl DropZone
{
get { return panelControlCustom; }
}

// ...
}

public class UserControlDesigner : ParentControlDesigner
{
public override void Initialize(IComponent component)
{
base.Initialize(component);

if (Control is gttDXGridDashboard dashboard)
{
bool result = EnableDesignMode(dashboard.DropZone, "DropZone");
// this writeline never shows, maybe because it's in a control from the toolbox ?
Console.WriteLine($"EnableDesignMode(dashboard.DropZone, \"DropZone\") = {result}");
}
}
}
Теперь о проблеме: в форме, на которой есть gttDXGridDashboard и кнопка в зоне перетаскивания, файл Designer.cs выглядит следующим образом:

Код: Выделить всё

  // gttDXGridDashboardList.DropZone
//
this.gttDXGridDashboardList.DropZone.Controls.Add(this.gttDXSimpleButtonAddMultipleChassis);
Это работало хорошо, пока проект работал на платформе .NET, но с момента перехода на .NET 8 эта строка в файле Designer.cs с этого момента удалена Я помещаю другой элемент управления в зону сброса или даже когда я, например, перемещаю существующую кнопку (

Код: Выделить всё

gttDXSimpleButtonAddMultipleChassis
) немного вправо или влево.
В этот момент кнопка gttDXSimpleButtonAddMultipleChassis все еще существует в форме, но больше не имеет родительского элемента и поэтому невидима и непригодно для использования.
Я пробовал обновить все пакеты, пересобрать все исходные коды, перезапустить VS, но безрезультатно.
Тогда я захотел найти обходной путь и напишите некоторый код, который поместит все элементы управления без родительского элемента обратно в зону сброса, но я не знаю, как искать элементы управления, у которых нет родительского элемента, я не могу перебрать это.Controls, потому что у этих элементов управления нет родительского элемента больше.
Здесь мне нужна небольшая помощь.
Я сделал что-то не так с определением зоны сброса?
Известна ли эта ошибка/проблема, и если да, то есть ли ее исправление/обходной путь?
Если все не удается, как мне найти элементы управления, у которых нет родительского элемента?Я знаю, что всегда могу написать код в формах, в которых возникает эта проблема, чтобы вернуть элементы управления обратно, но это означало бы повторное написание почти одного и того же кода в нескольких формах, мне нужен более общий обходной путь.>

Подробнее здесь: https://stackoverflow.com/questions/784 ... avoid-this
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»