星期一, 9月 18, 2023

[C#] InitializeComponent()

以往看見 InitializeComponent() 在 Form.cs 內而不是在 designer.cs 的 Code,都是些較早期的網路範例 Code,這次在公司內部發現 WinForm Project 發現,紀錄該情況

標準 Form

標準 Form 應該會附帶一個 designer.cs 檔案,建構子內會有 InitializeComponent(),是指向 designer.cs 檔案


designer.cs 檔案內會有 Form 控件相關設定值
namespace WindowsFormsApp1
{
    partial class Form1
    {
        /// <summary>
        /// 設計工具所需的變數。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清除任何使用中的資源。
        /// </summary>
        /// <param name="disposing">如果應該處置受控資源則為 true,否則為 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form 設計工具產生的程式碼

        /// <summary>
        /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器修改
        /// 這個方法的內容。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(800, 450);
            this.Text = "Form1";
        }

        #endregion
    }
}
非標準的 Form

如下圖,Form 內沒有 designer.cs 檔案,InitializeComponent() 則是都在 Form.cs 檔案內,說實話也不知道要如何稱呼該 Form


重現該 Form

反覆建立 Form 後發現,只要新增一個類別檔案,再去繼承 System.Windows.Forms.Form 後,等同於把 class 轉成 Form 後就會出現該情況,但該情況也可以正常運行,公司內的 Code 已經存在很久,還是 FormBase 設計,每個 Form  都要去繼承它,沒有因為該情況而產生異常過

不肯定是否還有其他方式也會發生,只試出該情況,VS 環境為 VS2022

沒有留言:

張貼留言