WinForm で InitializeComponent の中で オブジェクト初期化子を書くと デザイナー でエラーが出る
タイトルの通り。
久々に WinForm を触る機会があってハマったのでメモ。
オブジェクト初期化子はこれのこと。
オブジェクト初期化子とコレクション初期化子 (C# プログラミング ガイド) | Microsoft Docs
private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(34, 148); this.button1.Name = "button1"; // this.button1.Size = new System.Drawing.Size(138, 57); this.button1.Size = new System.Drawing.Size { Width = 138, Height = 57 }; this.button1.TabIndex = 0; this.button1.Text = "button1"; this.button1.UseVisualStyleBackColor = true; ... }
こんな風に オブジェクト初期化子を書いて Form の デザイナーを開くとこんな エラー が出る。
メソッド 'InitializeComponent' を解析できませんでした。パーサーによってエラー 'オブジェクト参照がオブジェクト インスタンスに設定されていません。' が報告されました。エラーの原因と考えられるものをタスク一覧で調べてください。 場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnMethodPopulateStatements(Object sender, EventArgs e) 場所 System.CodeDom.CodeMemberMethod.get_Statements() 場所 System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration) 場所 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager) 場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) 場所 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)
InitializeComponent を手で修正する方がアレですが、まあ気をつけて。