在 List 中 有 sort 的功能
但如果裡面的資料不是 數字型態,要他們作 sort() 往往會作出不符合需求的排序
甚至作不出來(自定義的 class 要繼承 IComparable 但這是一件很麻煩的事)
並不是每一個 class 都要發展成 完美或者一個很龐大的物件
這時 可以透過直接在 sort 中寫入簡短的程式碼 來省略這個步驟
首先 讓我們來建立一個 Class
public Class cObj
public mNum as integer
public mNmae as string
public mDate as new DateTimr
end Class
再來 讓我們自行建立一個以這個 class 為 T 的 List
Dim newList as new list(of cObj)
再來 請自行 產生 數個 加入 newList 中
Dim new1 as new cObj
new1.mNum = 99
new1.mName = "new1"
new1.mDate = now
Dim new2 as new cObj
new1.mNum = 10
new1.mName = "new2"
new1.mDate = now
newList.add(new1)
newList.add(new2)
....... (省略....請自行建立數個資料 然後加入 newList)
再來 讓我們對 mNum 作排序
newList.sort( Function(item1 As cObj, item2 As cObj) item1.mNum.CompareTo(item2.mNum))
我們使用 mNum 這個基本資料型態(Integer) 中定義好的 CompareTo() 來作資料排序
如此 就可以順利對自定義的 List 作想要的排序
'================================================================================================
Rh 發表在 痞客邦 留言(0) 人氣(1,069)
首先 Import System.Diagnostics
在來讓我們來檢查 目前 正在執行的程式中是否有我們要的程式
此時有兩種檢查方式
1. 將所有的 Process 讀出 再來檢察
Dim pro() As Process = System.Diagnostics.Process..GetProcesses()
2. 直接輸入要找尋的 程式名稱
Dim pro() As Process = System.Diagnostics.Process.GetProcessesByName("ReviewMap")
當然 最快的方式是第二種,將已知的 程式名找出後輸入
要將找出的程式關閉
For Each proces in Pro
proces.kill()
end For
如此,Windows 中 就沒有同樣的程式在執行了
再來,我們開始準備要呼叫的程式
Dim newPro As New Process
newPro .StartInfo.FileName = "C:\DeltaPsi2\DeltaPsi2.exe" '要呼叫程式的路徑
newPro .StartInfo.Arguments = "/OEM:HIROSE" '呼叫時需要輸入的 參數
newPro .Start()
newPro .StartInfo.WindowStyle = ProcessWindowStyle.Hidden '將執行的程式的視窗 隱藏 對Console 的比較有作用
newPro.start() '程式開始執行
Rh 發表在 痞客邦 留言(0) 人氣(2,740)
運用 interface 與 DLL 動態聯結的運用 最大的好處是 當DLL 更新的時候 整個程式不需要重新編譯就可以直接使用
這用在 DLL 更新時是一個很方便的地方
但有個先決條件, Interface 必須先定義好,因為如果後續要增加 任何的 sub Function 也是一樣必須重新編譯
Interface
首先建立一個 專案(類別庫) 進到程式碼編輯模式,將 Class 改成 Interface
在 Interface 中可以先預定好 要使用的 sub Function Event 甚至 Class
(再來到專案屬性設定 將 根命名空間 改成 nThickness 此部分可以不改在後面導入時只要清楚是哪個 Namespace 就可以)
Public Interface iThickness
Sub Measure(ByVal Model As String) '呼叫量測功能
Sub Result() '取得上一次量側的結果
Event ReportStateEvent(ByVal sander As Object, ByVal e As EventArgs) '事件 回報目前狀態
Event ReportModelListEvent(ByVal sander As Object, ByVal e As EventArgs) '事件 啟動回報取得的 Model
''' <summary>
''' 膜厚的值
''' </summary>
''' <remarks></remarks>
Class cThickness
Public MeasoureList As New List(Of String) '量測的值
Public ParameterList As New List(Of String) '量測的參數名稱
End Class
End InterFace
Class
建立 要由 Interface 來導入的 Class, 在 方案中直接新增一個 類別庫 專案
再來參考 直接參考剛剛建立 Interface 的專案( 測試中 參考專案就可以,但正式使用 最好是將 Interface 的專案編譯成 DLL,在這參考這DLL)
在Class 中繼承上面的 Interface
當繼承後會自動把 Interface 定義好的 Sub Function Event 都自懂導入,省去自行Key程式的時間,當然 裡面的程式碼都是空的
(如果可以有自行產生要的程式碼 多好........................)
Imports nThickness
Public Class cHoribaSE
Implements nThickness.iThickness
(省略)...............................
End Class
Process
再來 就是重頭戲了,首先在要當主程式參考 Interface 的專案或Dll
一樣在程式碼 Import 專案
Dim HoribaSE As nThickness.iThickness '在這邊宣告一個 Interface 準備拿來作連接使用
Dim asmFile As String = Application.StartupPath + "\Resources\cHoribaSE.dll" '要導入Dll 的路徑
Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.LoadFrom(asmFile) '要來導入的 DLL 的工具 與程式寫法
Try
HoribaSE = DirectCast(System.Activator.CreateInstance(asm.GetType("cHoribaSE.cHoribaSE")), nThickness.iThickness)
AddHandler HoribaSE.ReportStateEvent, AddressOf GetSEMessage '取得 SE 回報
AddHandler HoribaSE.ReportModelListEvent, AddressOf GetNewSERecipe '取得 SE Model
Catch ex As Exception
Msgbox("無法連線 SE Server", ex.ToString)
End Try
重點就在上面Mark 起來的這一行
後面 GetType 這個部分
"cHoribaSE.cHoribaSE" <-- 代表 Namespace.Class 就是上面建立的Class 的 根命名空間.Class
nThickness.iThickness <-- 代表 Namespace.Class 也就是上面一開始建立的 Interface 專案的 Namespace.Class
如此 就可以在主程式開始使用 動態導入的物件
Rh 發表在 痞客邦 留言(0) 人氣(1,124)
在第一篇 委派其實很簡單(一)介紹了委派的基本應用
相信很多人也聽過 跨執行緒時,需要用委派來處理,由其針對會改變Form表單上得資料時,更是必要
首先讓我們來做些小小的改變
Rh 發表在 痞客邦 留言(2) 人氣(6,510)
委派 說難不難,了解之後 使用就跟喝開水一樣,裝水 之後就喝水了
整個的動做可以分成兩個大部分,每個部分可以再分成兩個
大的可以分成 電台 與 收音機 兩者發送與接收在同一頻道的時候 收音機就可以撥放出電台傳送的音樂
電台可以細分為 發設機 與 發設天線
Rh 發表在 痞客邦 留言(1) 人氣(1,831)
網路上有許多篇相關的資料 但美中不足的都是 C#的文章
今天剛好遇到新的課題,發現用List.Find 剛好符合,可以來試試
在Framwork 下 泛型是一個相當好用方式,今天就來結合 泛型 與 List.Find 的結合
首先 讓我們創建 要做泛型的結構
Structure OriginInfo
public Name as string
public Org as pointf
End Structure
Dim OrgList as new List<of Origininfo>
Dim a1 as Origininfo
Dim a2 as Origininfo
Dim a3 as Origininfo
a1.Name = "AAA"
a1.Org = new PointF(100,100)
a2.Name = "BBB"
a2.Org = new PointF(100,100)
a3.Name = "CCC"
a3.Org = new PointF(100,100)
OrgList.ADD(a1)
OrgList.ADD(a2)
OrgList.ADD(a3)
資料建好後 再來就可以開始做搜尋的動做
(ps 在網路上有看到建議可以用Linq 的方式做查詢,其實也不是不行,但在使用上比較不方便,等會就可以看到,我們需要的是其中的特定資料
Linq 查詢出來的是一組資料,而且無法一開始就指定資料型態
特別需要注意,List.Find 是找出資料中符合的第一筆資料,如果裡面有2個以上資料相符, 而且都需要 ,就不適合用 Find 方法
或許是我這邊學的不好,有好的做法請多多提供)
Dim query as string = "BBB"
Dim result as Origininfo = OrgList.Find( Function( o as Origininfo) o.Name = query)
ok 就如此簡單,就能在 List 結構 找出所需要的資料
Rh 發表在 痞客邦 留言(2) 人氣(2,852)