才想到 repo 每次 clone 下來都必須特別去安裝 [C#] Microsoft Visual Basic Power Packs 3.0 來畫線條,但因線條都是直線,所以就用 Panel 來取代結案
直接編輯 Desinger 時,常常在拖曳新控進進入 Form 時,LineShape 就又不知道跑到哪去,還要去 Designer 內 debug,而且都直接進 desinger 內編輯了,在設計階段還是無法看見線條,執行後才會出現
最後還是許願一下,希望未來可以直接從工具列上直接把 LineShape 拖曳進 Form 內使用
nuget 套件
在這 nuget 安裝套件時代,PowerPacks 當然也不例外 - VisualBasic.PowerPacks.Vs ,不過實際拿來用時發現沒有這麼完美,因為 PowerPacks 的 LineShape 不會出現在工具列上,Google 時發現該套件在 VS 2019 時就已經呈現該狀態,參考該討論
雖然在工具列上看不見 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 產生
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;
}
}
下圖為效果呈現,左圖為設計階段、右圖為執行階段,兩種方式都必須在執行階段才會看見線條
Panel 畫線條
透過設定 Panel 屬性,可以有直線和橫線效果,分別設定
- BorderStyle:不要有邊框
- BackColor:背景顏色當成線條顏色
- Size:看是直線還是橫線,來調整 Height 或 Width,還可以當成線條寬度調整
雖然 Panel 無法取代 LineShape,畢竟 LineShape 還可以畫斜線,但在個人實務環境內已經就足夠
三種方式大合照
- 參考文章
- 官方論壇討論
沒有留言:
張貼留言