Используйте параметр, переданный конструктору формы в CreateParams в WinForms.NET
У меня есть пользовательская форма, определенная следующим образом:
internal class DropDownForm : System.Windows.Forms.Form
{
public DropDownForm(bool needShadow)
{ ... }
}
Мне нужно включить тень формы в зависимости от параметра needShadow, передаваемого конструктору формы в переопределенном члене CreateParams - что-то вроде этого:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
if (needShadow)
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
Проблема в том, что я не могу получить доступ к needShadow
параметр передается конструктору формы в этом CreateParams
, CreateParams
член выполняется перед первым оператором в моем конструкторе пользовательских форм, и я не могу кэшировать needShadow
значение передается конструктору формы в поле формы, чтобы использовать его позже в CreateParams
,
Чтобы решить проблему, я мог бы повернуть это needShadow
параметр в статическое свойство моей формы, установите его перед созданием формы и используйте это значение в переопределенном CreateParams
, Но, очевидно, это не очень хороший способ, так как мое приложение может создать несколько экземпляров этой формы, каждый со своим needShadow
значение.
Есть ли аккуратное решение этой проблемы в WinForms .NET?
1 ответ
Что ж, CreateParams
будет вызываться несколько раз. Первый звонок будет Form()
конструктор даже не Handle
создание, и поэтому вы можете смело игнорировать его:
public partial class DropDownForm : Form {
private needShadow = false;
public DropDownForm(bool needShadow) {
this.needShadow = needShadow;
// Actually, you should have needShadow set before this call
InitializeComponent();
}
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
if (needShadow)
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
...