星期二, 6月 07, 2022

[C#] VisualBasic.PowerPacks.Vs 套件

嘗試要在 Azure Pipeline 上對傳統 WinForm 作 CI 時,出現下面錯誤訊息
 
[C#] VisualBasic.PowerPacks.Vs 套件-1

才想到 repo 每次 clone 下來都必須特別去安裝 [C#] Microsoft Visual Basic Power Packs 3.0 來畫線條,但因線條都是直線,所以就用 Panel 來取代結案

nuget 套件

在這 nuget 安裝套件時代,PowerPacks 當然也不例外 - VisualBasic.PowerPacks.Vs ,不過實際拿來用時發現沒有這麼完美,因為 PowerPacks 的 LineShape 不會出現在工具列上,Google 時發現該套件在 VS 2019 時就已經呈現該狀態,參考該討論

[C#] VisualBasic.PowerPacks.Vs 套件-2

雖然在工具列上看不見 LineShape,但還是可以硬用,分別是
  • Coding 執行時動態產生
  • 直接編輯 Designer 來產生

Coding 執行時動態產生

嘗試要打 Code 時才發現到,原來 LineShape 還要依賴 ShaprContainer 才能放進 Form 內,以前直接拖曳根本就沒有發現到這點,下方範例出至官方文章 - LineShape Constructor (ShapeContainer) Sample Code
using Microsoft.VisualBasic.PowerPacks;
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WinFormCICD
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            ShapeContainer canvas = new ShapeContainer();
            LineShape line1 = new LineShape();
            canvas.Parent = this;
            line1.Parent = canvas;
            line1.StartPoint = new Point(0, 0);
            line1.EndPoint = new Point(1000, 1000);
        }
    }
}

直接編輯 Designer 產生

直接編輯 Desinger 時,常常在拖曳新控進進入 Form 時,LineShape 就又不知道跑到哪去,還要去 Designer 內 debug,而且都直接進 desinger 內編輯了,在設計階段還是無法看見線條,執行後才會出現
namespace WinFormCICD
{
    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.shapeContainer1 = new Microsoft.VisualBasic.PowerPacks.ShapeContainer();
            this.lineShape1 = new Microsoft.VisualBasic.PowerPacks.LineShape();
            this.SuspendLayout();
            // 
            // shapeContainer1
            // 
            this.shapeContainer1.Location = new System.Drawing.Point(0, 0);
            this.shapeContainer1.Margin = new System.Windows.Forms.Padding(0);
            this.shapeContainer1.Name = "shapeContainer1";
            this.shapeContainer1.Shapes.AddRange(new Microsoft.VisualBasic.PowerPacks.Shape[] {
            this.lineShape1});
            this.shapeContainer1.Size = new System.Drawing.Size(861, 579);
            this.shapeContainer1.TabIndex = 1;
            this.shapeContainer1.TabStop = false;
            // 
            // lineShape1
            // 
            this.lineShape1.Name = "lineShape1";
            this.lineShape1.X1 = 70;
            this.lineShape1.X2 = 71;
            this.lineShape1.Y1 = 108;
            this.lineShape1.Y2 = 245;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(861, 579);
            this.Controls.Add(this.shapeContainer1);
            this.Name = "Form1";
            this.Text = "PowerPacks-LineShape";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private Microsoft.VisualBasic.PowerPacks.ShapeContainer shapeContainer1;
        private Microsoft.VisualBasic.PowerPacks.LineShape lineShape1;
    }
}

下圖為效果呈現,左圖為設計階段、右圖為執行階段,兩種方式都必須在執行階段才會看見線條

[C#] VisualBasic.PowerPacks.Vs 套件-3

Panel 畫線條

透過設定 Panel 屬性,可以有直線和橫線效果,分別設定  
  • BorderStyle:不要有邊框
  • BackColor:背景顏色當成線條顏色
  • Size:看是直線還是橫線,來調整 Height 或 Width,還可以當成線條寬度調整
雖然 Panel 無法取代 LineShape,畢竟 LineShape 還可以畫斜線,但在個人實務環境內已經就足夠

三種方式大合照

[C#] VisualBasic.PowerPacks.Vs 套件-4

最後還是許願一下,希望未來可以直接從工具列上直接把 LineShape 拖曳進 Form 內使用

沒有留言:

張貼留言