在 WinForms.NET 的 CreateParams 中使用传递给表单构造函数的参数
Use parameter passed to form constructor in CreateParams in WinForms.NET
我有一个这样定义的自定义表单:
internal class DropDownForm : System.Windows.Forms.Form
{
public DropDownForm(bool needShadow)
{ ... }
}
我需要根据传递给覆盖的 CreateParams 成员中的表单构造函数的 needShadow 参数来启用表单阴影 - 如下所示:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
if (needShadow)
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
问题是我无法访问此 CreateParams
中传递给 表单构造函数 的 needShadow
参数。 CreateParams
成员 在我的自定义表单 构造函数 中的第一条语句 之前执行,我无法缓存 needShadow
值传递给表单字段中的表单构造函数,以便稍后在 CreateParams
.
中使用它
为了解决这个问题,我可以把这个 needShadow
参数变成我表单的 static 属性,在创建表单之前设置它并使用它覆盖 CreateParams
中的值。但显然这不是一个好方法,因为我的应用程序可以创建此表单的多个实例,每个实例都有自己的 needShadow
值。
在 WinForms .NET 中是否有解决此问题的巧妙方法?
好吧,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;
}
}
...
我有一个这样定义的自定义表单:
internal class DropDownForm : System.Windows.Forms.Form
{
public DropDownForm(bool needShadow)
{ ... }
}
我需要根据传递给覆盖的 CreateParams 成员中的表单构造函数的 needShadow 参数来启用表单阴影 - 如下所示:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
if (needShadow)
cp.ClassStyle |= CS_DROPSHADOW;
return cp;
}
}
问题是我无法访问此 CreateParams
中传递给 表单构造函数 的 needShadow
参数。 CreateParams
成员 在我的自定义表单 构造函数 中的第一条语句 之前执行,我无法缓存 needShadow
值传递给表单字段中的表单构造函数,以便稍后在 CreateParams
.
为了解决这个问题,我可以把这个 needShadow
参数变成我表单的 static 属性,在创建表单之前设置它并使用它覆盖 CreateParams
中的值。但显然这不是一个好方法,因为我的应用程序可以创建此表单的多个实例,每个实例都有自己的 needShadow
值。
在 WinForms .NET 中是否有解决此问题的巧妙方法?
好吧,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;
}
}
...