2010年10月31日 星期日

GoolgeMaps 圖示資源及本機載入

蒐集很多ICON的地方
http://code.google.com/p/google-maps-icons/wiki/EducationIcons

'http:網路
letteredIcon.image = "http://gmaps-samples.googlecode.com/svn/trunk/markers/blue/marker" + ClusterCnt[seli] + ".png";
'本機電腦上的路徑
letteredIcon.image = "file:///C:/school.png";

2010年10月26日 星期二

VS2008 Dotfuscator簡易使用

開啟VS2008
選取(工具)-> Dotfuscator Community Edition
選擇建立新專案
在[輸入]頁籤中,將要模糊的模糊的DLL或EXE檔案加進來。
在[建置]頁籤中,點選 建置。

完成之後,會產生一個 [Dotfuscated]資料夾
內含一個map.xml及剛才輸入要模糊的DLL或EXE檔案

電腦技巧 圖片 -> PDF 工具使用心得(PDFill)

之前有掃描一下書籍中某些章節的內容資料,若能製作成PDF格式,並使用Pdf x-changer Viewer 軟體加註心得,那就太棒了。

以下是所需要的軟體(Free)
1.安裝 GhostScript 8.63 w32
2.安裝 FREE PDF Tools PDFill
3.系統會問要安裝 java虛擬機器

將要製作為PDF的圖片,選取後,以XP內建的相片列印精靈列印。
點選[列印喜好設定]進入[版面配置],選擇[旋轉橫印](很重要,才能符合一般的閱讀角度)
確定後,下一步,選擇[全頁傳真列印],下一步到結束。
最後輸入要的檔案名稱即可。

2010年10月21日 星期四

Excel 關閉XLS檔案出現的未清除剪貼簿資訊

使用前必須確定已引用 MS Forms 2.0 Object Library。
在引用項目點選[瀏覽] 目錄 windows\system32\fm20.dll
即會出現 MS Forms 2.0 Object Library。

若是在刪除頁籤時,出現要被刪除的頁籤有資料時的確認對話框
請用以下Code即可,無須使用 剪貼簿的方式刪除
Application.DisplayAlerts = False

資料來源
http://gb.twbts.com/index.php/topic,1878.0.html


Sub 取得剪貼簿內容()
 Dim data As New DataObject
 data.GetFromClipboard
 Range("A1") = data.GetText(1)
End Sub

Sub 寫入剪貼簿()
 Dim data As New DataObject
 chars = [A1].Characters(3, 5).Text '取得A1部份內容
 data.SetText chars '寫入DataObject
 data.PutInClipboard '寫入剪貼簿
 [B1].Select
 ActiveSheet.Paste '再貼到B1
End Sub

Sub 清除剪貼簿內容()
 Dim data As New DataObject
 Set data = New DataObject
 data.SetText ""
 data.PutInClipboard
End Sub


運用的範例Code

Fn = GetFileTailer(.FoundFiles(i))

Workbooks.Open Filename:=.FoundFiles(i)

'MsgBox GetFileTailer(.FoundFiles(i))
'要複製的「來源」範圍
'---------------------------------------------------------------
Windows(Fn).Activate
Sheets("復原_Sheet1").Select
Range("A1:P65535").Select

'故意使用這個指令,以避免出現 其他檔案的拷貝區域,然後出現對話框
Selection.Copy

'要被複製的「目的」範圍
'---------------------------------------------------------------
Windows(ThisWorkbook.Name).Activate
Sheets("Load").Select
Range("A1").Select

ActiveSheet.Paste



Dim DATA As New DataObject
Set DATA = New DataObject
DATA.SetText ""
DATA.PutInClipboard


'關閉
Workbooks(Fn).Close False, Fn

2010年10月20日 星期三

VB.net EXCEL FillAcrossSheets用法

複製[來源]頁籤到其他[所有]的頁籤
若有ABCD四個頁籤,亦即複製A到BCD頁籤

MSDN 的範例
is example fills the range A1:C5 on Sheet1, Sheet5, and Sheet7 with the contents of the same range on Sheet1.

x = Array("Sheet1", "Sheet5", "Sheet7")
Sheets(x).FillAcrossSheets _
Worksheets("Sheet1").Range("A1:C5")


.net 可用的Code如下

XlsBook.Worksheets.FillAcrossSheets(XlsBook.Sheets(SelTargetList).Range("B7:D16"), Excel.XlFillWith.xlFillWithAll)

   

2010年10月19日 星期二

VB.net EXCEL 跨頁籤(Sheet)複製表格內容

建議將EXCEL以早期繫結( early binding)的方式來做引用
Dim xlsExcel As New Excel.Application
Dim xlsBook As Excel.Workbook
Dim xlsSheet As Excel.Worksheet
Dim xlsRange As Excel.Range
xlsBook = xlsExcel.Workbooks.Open(My.Application.Info.DirectoryPath & "\file.xls")
xlsExcel.DisplayAlerts = False


為求處理上之效率,我們假設將已經有完備格式的Source頁籤,拷貝多份套入個別的數據。
假設要5份,分成複製套表5份,實際內容5份,共計10份。
複製後,將儲存內容的頁籤刪除
刪除頁籤時,別忘了頁籤若有內容,EXCEL會提醒,為避免程式無法遂行刪除作業,記得將 DisplayAlerts = False即可


For Each PP In DocNeedTelphoneInfo

'複製頁籤
xlsSheet = xlsExcel.Sheets("Source")
xlsSheet.Copy(xlsSheet)
xlsExcel.Sheets("Source (2)").Name = PP.Name & "A" '修改頁籤名稱

'跨頁籤拷貝資料內容
xlsSheet = CType(xlsBook.Worksheets(PP.Name), Excel.Worksheet)
'決定要拷貝的範圍
xlsRange = xlsSheet.Range("A6:O" & XlsCellCountList.Item(TargetI) + 6)
xlsRange.Copy()
xlsSheet = CType(xlsBook.Worksheets(PP.Name & "A"), Excel.Worksheet)
xlsRange = xlsSheet.Range("A6:O" & XlsCellCountList.Item(TargetI) + 6)
'貼上
xlsRange.PasteSpecial(Excel.XlPasteType.xlPasteAll, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, False, False)
'畫框線
xlsRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous
'解除之前的選取狀態
xlsRange = xlsSheet.Range("A6")
xlsRange.Select()


'刪除
xlsExcel.Sheets(PP.Name).delete()
'修改
'xlsExcel.Sheets(PP.Name & "A").Name = PP.Name '修改頁籤名稱
xlsExcel.Sheets(PP.Name & "A").Name = "d" & PP.Name '修改頁籤名稱

2010年10月18日 星期一

VB.net EXCEL Sheet.copy導致的效率問題

使用頁籤的整個COPY可以節省程式碼的撰寫。
例如:活頁簿中有一個頁籤範本,若要針對一組號碼個別製作一個頁籤,並輸入資料在上頭。

若依照下列邏輯,會有大災難,效能會很差,甚至導致整個程式當掉。

依照個別目標,複製一頁,寫入資料,依此重複.....

For Each x In TargetList
'------------------------------------------------------------
objSheet = objExcel.sheets("Source")
objSheet.Copy(objSheet)
objExcel.sheets("Source (2)").Name = SelTargetList '修改頁籤名稱

SQL.....
range("A6")....、Cell
....

Next

若改為以下

先寫好所有內容(SQL-->Range、Cell),最後再做copy頁籤的動作,然後複製到新COPY的頁籤,刪除所在的頁籤....
雖然寫起來有點複雜,但時間上會比較節省,提供參考。

2010年10月14日 星期四

VB.net Listview 使用方式

'設定標題ListView1 Header
'********************************************************************************************************
With ListView1
.View = View.Details
.Columns.Add("A", 200, HorizontalAlignment.Left) '每次增加一個 欄名稱 欄寬度 對齊
.Columns.Add("B", 150)
.Columns.Add("C", 50)
.Columns.Add("D", 110)
.Columns.Add("開始時間", 180
.GridLines = True
.LargeImageList = ImageList1 '增加 ICON 圖示對應
.SmallImageList = ImageList1 '增加 ICON 圖示對應
End With


'清除ListView1項目
ListView1.Items.Clear()


'以程式碼新增一筆資料
Dim Nitem As New ListViewItem(dr(0).ToString, 4) '4 wav.icon圖示
Nitem.SubItems.Add(TalkDirection)
Nitem.SubItems.Add(dr(2).ToString)
Nitem.SubItems.Add(dr(3).ToString)
Nitem.SubItems.Add(dr(4).ToString)
Nitem.SubItems.Add(dr(5).ToString)
ListView1.Items.Add(Nitem)

VB.net Listview 全選/全不選 勾選框沒有反應?

請注意 勾選框若要有反應 .Checked = True
.Selected = True 好像是用在無 CheckBox的狀態,不可與之混淆

MsgBox(ListView1.SelectedItems.Count)' 取得被選取的項目數量
MsgBox(ListView1.CheckedItems.Count) ' 取得被勾選的項目數量


'全選 / 全不選 ListView1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' / 全不選

If Button1.Text = "全選" Then

ListView1.MultiSelect = True '允許 多選
For Each item As ListViewItem In ListView1.Items
item.Checked = True '勾選框才有反應
item.Selected = True'選取項目才有反應
Next

Button1.Text = "全不選"
Else

ListView1.MultiSelect = True '允許 多選
For Each item As ListViewItem In ListView1.Items
item.Checked = False '勾選框才有反應
item.Selected = FalseTrue'選取項目才有反應


Next


Button1.Text = "全選"
End If
End Sub

2010年10月12日 星期二

VS2008 IDE:XML檔案若無法依照階層排序的處理

若用VS2008開啟XML檔案時,XML呈現一整串字,而不是階層時。
請全選複製文字,剪下再重貼一次,即可呈現階層的XML文件。

2010年10月11日 星期一

VB.net 全域變數? --> 類別shared

參考資料:
請問vb_net中 全域變數要如何設定?
http://chip.byipo.cn/article/268478.html
[C#]如何達成全域變數的功能
http://www.dotblogs.com.tw/chou/archive/2009/03/11/7438.aspx

在VB.net裡已經沒有全域變數,請改用類別變數。
該類別變數,若要在整個應用程式中給其他類別使用,例如:Public Class FormXXXX 某表單
提供其他類別存取時,必須使用Shared關鍵字來宣告。

A:類別內使用
Public Class testUse
Dim Usetimes as integer
end Class

B:整個應用程式都可使用
Public Class testUse
public Shared Usetimes as integer
end Class

B部分,若不加上Shared ,引用相關程式碼時,會發生錯誤[會出現參考非共用成員需要物件參考]
例如:msgbox (testUse.Usetimes )

2010年10月10日 星期日

VB.net 類別內有陣列的寫法(宣告,寫入,讀取)

Public Class MainParentCluster
Private _TargetIdentifier As String '目標名稱
Private _ConnectCount As Long '連結之物件數量

Private _aArrary() As Long '陣列,儲存數個數值

Public Property TargetIdentifier() As String '名稱
Get
Return _TargetIdentifier
End Get
Set(ByVal Value As String)
_TargetIdentifier = Value
End Set
End Property
Public Property ConnectCount() As Long '連結之物件數量
Get
Return _ConnectCount
End Get
Set(ByVal Value As Long)
_ConnectCount = Value
End Set
End Property
'屬性為 陣列 的用法
Public Property aArrary() As Long()
Get
Return _aArrary
End Get
Set(ByVal Value As Long())
_aArrary = Value
End Set
End Property
End Class

'寫入 ------------------------------------
Dim MainClusterObj As New List(Of ParentObj_SubCount)
Dim preCluster As String = ""
Dim ccnt As Long = 0
Dim i As Long
Dim k As New List(Of Long)

For i = 1 To 10 '測試寫入10筆資料!
preCluster = "A" & i
ccnt = i * 10
'自訂測試 給予類別內的陣列 3筆資料
k.Add(i)
k.Add(i + 1)
k.Add(i + 2)
MainClusterObj.Add(New ParentObj_SubCount With {.ParentObjName = preCluster, .ChildCount = ccnt, .LineArrary = k.ToArray})
k.Clear()

Next


'讀取 ------------------------------------


Dim PP As ParentObj_SubCount
'Dim PP As MainParentCluster

Dim PPArray As String

For Each PP In MainClusterObj
PPArray = ""
For i = 0 To PP.LineArrary.Length - 1

PPArray &= i & "值=" & PP.LineArrary(i).ToString & ","
Next
Debug.Print(PP.ParentObjName & " " & PP.ChildCount & " " & PPArray)
Next

C# to VB.net 轉換網站

免費的C# to VB.net 轉換網站
http://www.developerfusion.com/tools/convert/csharp-to-vb/
上述測試過namespaces 轉換的OK

2010年10月1日 星期五

VB.net 修改新增EXCEL頁籤

objExcel 為之前文件宣告過的物件

SelTargetList="想要的頁籤名稱"
'新增頁籤並設定相關欄位
objExcel.sheets.Add.Name = SelTargetList
With objExcel.sheets(SelTargetList)
.Range("A1").offset(0, 14).Value = "備考" '
End With


'修改現有的頁籤名稱 Sheet1 --> SelTargetList變數
objExcel.sheets("Sheet1").Name = SelTargetList

VB.net Excel新增超連結(網頁GoogleMaps、本機檔案路徑)

宣告物件方式,省略,因之前文件有介紹過了
寫入本機目錄,可開啟檔案。
若寫入網址,可開啟網頁。
以下為 利用GoogleMaps查詢 地址名稱 及 經緯度的範例

http://maps.google.com.tw/maps?q=臺北市忠孝東路一段xxx號
http://maps.google.com.tw/maps?q=25.xxx,121.xxxx

dr(xx).ToString '為資料庫擷取出來的資料

With objExcel.sheets("sheet1")

'基地台有資料,再送GOOGLE 查詢
.Hyperlinks.Add(.Range("A2").offset(i, 11), "http://maps.google.com.tw/maps?q=" & TransFmt_Address990930(dr(21).ToString), "", "點選我開啟網頁喔", dr(21).ToString)
.Hyperlinks.Add(.Range("A2").offset(i, 15), "http://maps.google.com.tw/maps?q=" & dr(24).ToString & "," & dr(23).ToString, "", "點選我開啟網頁喔", dr(21).ToString)

End If

追蹤者