Предположим, у вас есть форма с именем FormBase
, и все другие формы наследуются от этой формы.
Например, у меня есть public class Form formTest : FormBase
Что у меня сейчас в ctor formTest:
public class Form formTest : FormBase
{
public formTest()
{
InitializeComponent();
Program.MainForm.AddToFormSizes(this, this.Size);
}
}
Этот код добавляет экземпляр formTest
в словарь на главной форме с его size
Это работает, но я хотел бы переместить этот код в FormBase
, чтобы мне не нужно было помещать эту строку кода в каждую унаследованную форму.
public class Form FormBase : Form
{
public FormBase()
{
InitializeComponent();
Program.MainForm.AddToFormSizes(this, this.Size);
}
}
Теперь проблема в том, что когда я это сделаю, size
будет иметь размер FormBase
во время разработки, а не размер formTest
.
Есть ли способ в FormBase
захватить размер formTest
или любую другую форму, унаследованную от FormBase
?
для справки, это код AddToFormSizes
в MainForm
private Dictionary<Form, Size> _formSizes = new Dictionary<Form, Size>();
public void AddToFormSizes(Form form, Size size)
{
_formSizes.Add(form, form.Size);
}
formTest
установлен (изменен) вformTest.InitializeComponent()
, о которомFormBase
ничего не знает. До того, как это произойдет,formTest.Size
- это размер, производный отFormBase
. - person 41686d6564   schedule 19.04.2019Program.MainForm.AddToFormSizes(this, this.Size);
вprotected override void OnHandleCreated(EventArgs e)
послеbase.OnHandleCreated(e);
. Внутри вашейbase
формы. - person Jimi   schedule 19.04.2019MainForm
- это просто статическая ссылка вProgram.cs
для доступа к моей основной форме. Я попробую это предложение, спасибо - person GuidoG   schedule 19.04.2019MainForm
вProgram.cs
. Вам просто нужно сделатьAddToFormSizes()
статичным. Вы можете вызвать его из членов экземпляра внутриMainForm
. - person Jimi   schedule 19.04.2019