В моей форме1 У меня есть этот метод.Общий вызов класса, который имеет параметры
public void ChangeView<T>() where T : Control, new()
{
if (transitionManager1.IsTransition)
{
transitionManager1.EndTransition();
}
transitionManager1.StartTransition(BasePanel);
try
{
T find = Find<T>(BasePanel);
if (find != null)
{
find.BringToFront();
}
else
{
find = new T();
find.Parent = BasePanel;
find.Dock = DockStyle.Fill;
find.BringToFront();
}
}
finally
{
transitionManager1.EndTransition();
}
}
проблема, когда я пытаюсь вызвать этот метод из пользовательского элемента управления с именем userC1, которые имеют некоторые параметры в конструкторе, как показано ниже
Form1 f;
public UserC1(Form1 f)
{
InitializeComponent();
this.f = f;
}
я вызываю метод следующим образом в виде 1
ChangeView<UserC1>();
но выше код - это ошибка, о которой говорит должен быть не абстрактный тип с открытым конструктором с меньшим значением, чтобы использовать его в качестве параметра в общем типа или метода.
как я могу исходить из этой проблемы. Мне нужны эти параметры в конструкторе userC1.
Ну что вы ожидаете 'find = new T()' делать в 'ChangeView', если' T' '' UserC1'? –
Вам явно требуется конструктор без параметров с помощью 'new()' в сигнатуре. Однако, если вы удалите это, как вы представляете себе вызов конструктора с разными сигнатурами? Как вы узнаете, что, например, 'Foo' имеет конструктор без параметров, но' Bar' требует параметров? Вы не можете, и теперь у вас нет общей функции. Если вам нужна ссылка на родительскую форму, почему бы просто не использовать 'Control.Parent'? –