Сегодня столкнулся с проблемой, как показано на рисунке выше, элемент управления пишется сам по себе, а не стандартный элемент управления.Вышеупомянутая проблема возникает при выполнении Controls.Add(control).
Конкретное описание проблемы: Удаление и добавление различных элементов управления в соответствии с настройками условий.Если текущий элемент управления не соответствует условиям, удалите элемент управления и добавьте новый элемент управления.
код показывает, как показано ниже:
if (this.Panel.Controls.Contains(this.R_Parameter))
{
this.Panel.Controls.Remove(this.R_Parameter);
R_Parameter.Dispose();
}
this.RMC_Parameter = new MODE_CONFIG();
this.Panel.Controls.Add(R_Parameter);
Кто-то предложил решить проблему, переписав метод CreateHandle() элемента управления сообщением об ошибках, код выглядит следующим образом:
protected override void CreateHandle()
{
if (!IsHandleCreated)
{
try
{
base.CreateHandle();
}
catch { }
finally
{
if (!IsHandleCreated)
{
base.RecreateHandle();
}
}
}
}
После тестирования стало лучше, а после повторного тестирования несколько раз проблема появилась снова. Оказывается, становится лучше, но не устраняется основная причина.
При поиске информации позже кто-то предположил, что причина этой проблемы в том, что удаленные элементы управления не были выпущены. Итак, добавьте метод Dispose(), код выглядит следующим образом:
if (this.Panel.Controls.Contains(this.R_Parameter))
{
this.Panel.Controls.Remove(this.R_Parameter);
R_Parameter.Dispose();
}
this.RMC_Parameter = new MODE_CONFIG();
this.Panel.Controls.Add(R_Parameter);
Протестировал еще раз и обнаружил, что проблема решена, и она не появлялась после многократного повторения.
Затем закомментируйте метод CreateHandle(), а затем проверьте и обнаружите, что проблема возникает снова, поэтому имеет смысл переписать метод CreateHandle().