Однако теперь я обнаружил проблему, которую Подозреваемый — это ошибка в конструкторе 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}");
}
}
}
Код: Выделить всё
// gttDXGridDashboardList.DropZone
//
this.gttDXGridDashboardList.DropZone.Controls.Add(this.gttDXSimpleButtonAddMultipleChassis);
Код: Выделить всё
gttDXSimpleButtonAddMultipleChassisВ этот момент кнопка gttDXSimpleButtonAddMultipleChassis все еще существует в форме, но больше не имеет родительского элемента и поэтому невидима и непригодно для использования.
Я пробовал обновить все пакеты, пересобрать все исходные коды, перезапустить VS, но безрезультатно.
Тогда я захотел найти обходной путь и напишите некоторый код, который поместит все элементы управления без родительского элемента обратно в зону сброса, но я не знаю, как искать элементы управления, у которых нет родительского элемента, я не могу перебрать это.Controls, потому что у этих элементов управления нет родительского элемента больше.
Здесь мне нужна небольшая помощь.
Я сделал что-то не так с определением зоны сброса?
Известна ли эта ошибка/проблема, и если да, то есть ли ее исправление/обходной путь?
Если все не удается, как мне найти элементы управления, у которых нет родительского элемента?Я знаю, что всегда могу написать код в формах, в которых возникает эта проблема, чтобы вернуть элементы управления обратно, но это означало бы повторное написание почти одного и того же кода в нескольких формах, мне нужен более общий обходной путь.>
Подробнее здесь: https://stackoverflow.com/questions/784 ... avoid-this
Мобильная версия