代码之家  ›  专栏  ›  技术社区  ›  TecMan

在WinForms.NET的CreateParams中使用传递给窗体构造函数的参数

  •  1
  • TecMan  · 技术社区  · 6 年前

    我有一个自定义表单定义如下:

    internal class DropDownForm : System.Windows.Forms.Form
    {
        public DropDownForm(bool needShadow)
        { ... }
    }
    

    我需要根据传递给重写的CreateParams成员中的表单构造函数的need shadow参数启用表单阴影-如下所示:

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
    
            if (needShadow)
                cp.ClassStyle |= CS_DROPSHADOW;
    
            return cp;
        }
    }
    

    问题是我无法访问 needShadow 传递给 在这个 CreateParams . 这个 创建参数 在第一条语句之前执行 以我的定制形式 ,我无法缓存 传递给表单字段中的表单构造函数以在以后使用它的值 .

    为了解决这个问题,我可以把这个 参数转换为 静态特性 在创建窗体之前设置它,并在重写的 创建参数 不是个好办法 因为我的应用程序可以创建此表单的多个实例,每个实例都有自己的 需求阴影

    在WinForms.NET中有解决这个问题的方法吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Dmitrii Bychenko    6 年前

    好, 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;
       }
     }
     ...