Skip to Content

電腦

C# WinForm 取得傳入的參數

C# WinForm 程式要取得使用者傳入的參數,可以使用

 

Environment.GetCommandLineArgs();

 

所取得的第一個元素就是執行檔的檔案名稱。

 

 

public MainForm()

{

    InitializeComponent();

    string[] args = Environment.GetCommandLineArgs();

    foreach(string s in args) {

        MessageBox.Show(s);

    }

}

 

另一種在網路上常看到的方法,就是手動在 Main 主程式的參數中加上 string[] args。

這個方式取得的參數,並不包含執行檔的檔案名稱,這是和上面方法不同的地方,在使用上要注意。

 

[STAThread]

static void Main(string[] args)

{

    foreach(string s in args) {

        MessageBox.Show(s);

    }

    Application.EnableVisualStyles();

    Application.SetCompatibleTextRenderingDefault(false);

    Application.Run(new MainForm());

}

 

 

C# 單元測試

C# 單元測試

參考:

https://docs.microsoft.com/zh-tw/visualstudio/test/getting-started-with-unit-testing?view=vs-2019&tabs=mstest

 

建立測試程式

先建立測試程式

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace UnitTest {

    public class Sample {

 

        int a = 0;

        int b = 0;

 

        public Sample(int x, int y) {

            a = x;

            b = y;

        }

 

        public int Add() {

            return a + b;

        }

 

        public int Add2() {

            return a * 2 + b * 2;

        }

 

        public int AddAnother (int x) {

            return a + b + x;

        }

    }

}

 

建立測試單元

在程式視窗中按滑鼠右鍵,選擇「建立單元測試」

 

在 Visual Studio 上使用 GitHub 進行版本控制

本文簡單示範 Visual Studio 建立 C# 專案並使用 GitHub 基本功能。

雖然 Windows 的 TortoiseGit 很好用,但如果可以直接在 Visual Studio 上直接操作,那還是比較方便。

建立專案

 

HTML 標記 li 底下 span 指定文字格式的奇怪問題

有人發現一個 CSS 排版的問題,後來我發現,只要是這樣 

<ul><li><span class="abc">一堆文字....一堆文字....<a>一堆文字</a>....</span>

在 css 中指定 li 底下 span 的文字大小, 例如

.abc {font-size: 30px; }

而那一堆文字中若有一些標記,不只是 <a>, 我試過 <b> 甚至 <c>,標起來的文字都會上移,不過要夠長,捲到第二行之後才會看到。

底下是測試截圖,我加了下底線。

Chrome 和 Edge 都會如此,IE 則不會。

找了一些類似的資料,還不知真正的原因,但 css 這樣設定就可以解決

li span { display:block; }

結果截圖如下:

不過會不會有什麼副作用就不清楚了。

Swift 連結 Swift、Objective-C、C++

本篇在說明 Swift 連結其他專案的 Swift、Objective-C、C++ 的方法與注意事項。

 

Swift 連結其他 Swift

 

假設有一個目錄 testClass,底下有三個程式 

 

main.swift

person.swift

year.swift

 

其中 person.swift 會使用 year.swift 的內容,現在新的專案需要用到 person.swift 與 year.swift。

 

要加入檔案或目錄時,要選擇 Xcode 功能表的

 

File -> Add Files to "myProject"...

 

此時有這些選擇,通常我都不選 Copy ites if needed,以免被引用的專案後來有更新時,引用的專案還是用已經複製進來的舊版資料。當然,這功能我也不清楚,也許未來真的有需要使用的機會。

 

將 CheckBox 嵌入 TableView 中使用

在看此篇之前,一些基本的重點要先參考「Mac Cocoa NSTableView 程式與綁定
 
這一段是記錄把 CheckBox 放在 TableView 中使用所遇到的一些狀況。

這是一個標準的 Column 設計。

首先把紅色的部份移除,換成 CheckBox,如下圖。

註:其實還有一種方法,就是不移除 Table Cell View,只移除 Table View Cell,然後用 CheckBox 取代 Table View Cell。底下程式也會需要修改。

然後設定 CheckBox 的 Identifier,本例為 tableCheck。

Xcode 單元測試 (Unit Test 和 UI Test)

單元測試也是寫程式重要的一環,雖然我之前寫程式也沒有完全做到,但基本上的測試總是要有的,所以還是了解了一下 Xcode 上的單元測試。

我的環境是 macOS Catalina 10.15 + Xcode 11.1

建置專案

首先,在建立專案是要記得勾選「Include Unit Tests」和「Include UI Tests」。

如果一開始沒有加,也可以在主選單用 File -> New -> File... 加上去。

建好的專案就會像下圖一般,有 Unit Tests 和 UI Tests 二個區塊。

Swift 使用 XMLDocument 處理 XML

Swift 有二種處理 XML 的方法,一種是 SAX,一種是 DOM。SAX 是使用 XMLParser,功能比較單純,早期就是用這個方法處理 XML 經文,這種方法不易處理複雜的資料。DOM 則是用 XMLDocument,比較能依前後文的不同來處理資料,本文是介紹後者的功能。

基本功能介紹

 

載入整個 XML 檔案

let doc = try? XMLDocument(contentsOf: file)

取出 root

let root = doc?.rootElement()

取出指定元素

let node = root?.elements(forName: "body")[0]

取出元素名稱

let name = node.name

取出元素全部屬性

let attribs = node.attributes
if attribs != nil {
    for att in attribs!  {
        ......
    }
}

Mac Cocoa NSTableView 程式與綁定

經過這兩篇「NSOutlineView 使用程式呈現樹狀資料」、「Mac Cocoa NSOutlineView 資料綁定」的練習,這次直接處理 NSTableView,果然駕輕就熟,稍為查一些資料,很快就做出成果了,畢竟它比 NSOutlineView 簡單,基本架構都差不多。

這篇就不談太多細節,只把重點記錄下來。

資料綁定

先由資料綁定做起。

準備資料

TableView 是表格狀的資料,所以就用藏經目錄的結構來處理,底下只有三個欄位,ID、經名與作譯者。

宣告 catalog 變數,它是 Catalog 物件的陣列,底下建立了三筆資料。

Mac Cocoa NSOutlineView 資料綁定

此篇實作是接續「NSOutlineView 使用程式呈現樹狀資料」,那次是用程式來處理,本篇要使用 Cocoa Binding 的方式來綁定資料。

關於 Cocoa Binding,可先參考這篇「Mac Cocoa 資料綁定 (Binding) 實作測試」的基本概念。

簡單來說,就是利用資料綁定的方法來呈現樹狀目錄,而不是寫一堆程式來處理。

準備資料

為了配合綁定的需求,把上一個例子的資料稍為修改如下,主要是加上 class 要加上 @objcMembers,變數要加上 @objc 和 dynamic。

底下就是全部的程式了。

訂閱文章


about seo