2013年11月28日 星期四

Application has encountered a problem and needs to close. We are sorry for the inconvenience.

Q:
以VB.net撰寫的程式,有一天在英文視窗下執行,突然出現以下錯誤訊息:
XXX.exe has encountered a problem and needs to close.  We are sorry for the inconvenience.
但在其他語系的視窗執行正常,且切換至英文介面亦無問題。



A:
經測試,只要把en目錄改名,程式又正常了,只是缺乏英文介面,因此判斷是en目錄下的XXX.resource.dll 壞掉了,經兩整天的除錯,最後依下列步驟解決了:

  1. 初步判斷式表單的翻譯檔壞掉,因此決定將英文語系的翻譯檔暫時拿掉,但因表單很多,要全部移除,再一一加入專案測試,恐怕很費事,且由於程式一開始就當掉,因此先從程式首先載入的表單著手,果不其然,就 Bingo了。
  2. 移除語系檔的方法是先將FFF.en.resx檔案移走,再編輯XXX.vbproj檔,搜尋 FFF.en.resx,將整段移除。
  3. 重新編譯並執行,如果執行無誤,那就是那個檔壞了。
  4. 之後再把步驟3還原回去,恢復原來樣貌,並在Visual Studio 開啟 FFF form,並切換至英文語系,若出現錯誤訊息,那就表示找到了。
  5. 再做一次步驟3,並開啟 FFF form切換至英文語系,已產生一個新的英文語系檔案,重新翻譯即可。
注意,若你從Visual Studio 開啟 FFF.en.resx檔,並不一定會出現錯誤,必須將表單切換至對應之語系,才會出現錯誤畫面。 

2013年11月21日 星期四

ClipBoard.SetText出現亂碼

Q: 在英文視窗下,以.net 呼叫ClipBoard.SetText出現亂碼.
A:
ClipBoard.SetText(str, TextDataFormat.Text ) 作業系統會將字串轉成預設語系之字串,故中文字會被截成1個byte.
若將參數拿掉如下,就會正常.
ClipBoard.SetText(str)

2013年11月20日 星期三

設定網頁操作模式相容於舊版IE

由於瀏覽器不斷更新,也造成網頁程式在不同版本上執行出現問題,如果要逐一解決問題,IT人員恐怕會夜不安眠吧,幸好,MS IE提供一種簡易解法,可將網頁向下相容於舊版IE,這樣,就算使用者以新版IE執行,它也會以網頁所設定的版本解析HTML/Javascript,經測試結果好像還不賴。

處理方法很簡單,只要在網頁的段落內加上下列宣告,就搞定了。
<meta http-equiv="X-UA-Compatible" content="IE=7" />
如果網頁眾多,建議在主版網頁(Master Page)內宣告,就一勞永逸了。

2012年5月7日 星期一

Q: How to implement Multi-threading?
A: 
1. Simple

Module Module1

    Sub Main()
        For i As Integer = 1 To 10
            ' create a thread and run
            Dim obj As New Threading.Thread(AddressOf ThreadMethod)
            obj.Start()
        Next
        Console.ReadLine()
    End Sub

    ' the running method in every thread
    Sub ThreadMethod()
        Console.WriteLine(Now)
    End Sub
End Module
2. With Parameters : add Sub() before the method in Thread object initialization
Dim obj As New Thread(Sub() SaveImage(url, mFileName))
obj.Start()

...

    Public Sub SaveImage(url As String, mFileName As String)
        'Public Sub SaveImage()
        'Dim url As String, mFileName As String
        Dim objWebClient As New WebClient

        objWebClient.DownloadFile(url, mFileName)
        Console.WriteLine(url)
    End Sub

2012年4月15日 星期日

ASP.net Menu 在 IE9、Google Chrome、FireFox 內執行出現空白

Q: ASP.net Menu 在 IE9、Google Chrome、FireFox 內執行,下拉式選單出現空白
A: 在母版網頁的內加一行如下:




or


2011年12月26日 星期一

XML 解析

Q: 讀入一個字串,如何取出節點的值?
A:
Dim xmltext As New System.Text.StringBuilder
Dim strReader As StringReader = New StringReader(mXml)
Dim reader As XmlTextReader = New XmlTextReader(strReader)
Dim docNav As New XPathDocument(reader)
Dim objxPath As XPathNavigator = docNav.CreateNavigator
Dim objNode As XPathNavigator = objxPath.SelectSingleNode("/")
Return objNode.Value

2011年6月13日 星期一

DataSet Tips

DataSet 是一個儲存在記憶體內的資料庫,它擁有很多類似資料庫的操作功能,例如:

1. 兩表合併(Merge Table)
Table1.Merge(Table2, False)
有時候,這個方法會因為資料結構造成失敗,此時可改用DataRelation,將兩個Table Join。
Dim mDataRelation As New DataRelation("TempJoin", Table2Columns, Table1Columns, False)
ds.Relations.Add(mDataRelation)
' jj 是Table2填入Table1的起始欄位
For Each mRow As DataRow In Table1.Rows
For ii = jj To Table2.Columns.Count - 1
mRow(jj+ii) = mRow.GetParentRow("TempJoin")(ii)
Next
Next

2. 排序(Sort)
Table1.DefaultView.Sort(Field1)
For i = 0 To Table1.DefaultView.Count - 1
aa=Table1.DefaultView(i).Item("Field2")
next

3. 篩選(Filter)
Dim rows As DataRow() = dtTopicid.Select("Field1='aaa'")

4. 衍生欄位(Derived Field)
Dim col As DataColumn
col = dt.Columns.Add("ExpCol", GetType(Boolean), expr)



另外,還有一些小技巧,與大家分享:
1. 欄位值大小寫有區別(Case Sensitive)
Table1.CaseSensitive = True

2. 設定額外屬性(Custom Property)
column.ExtendedProperties.Add("TimeStamp", DateTime.Now)

3. 取唯一值(Unique Values)
Dim dtDistinct As DataTable = Table1.DefaultView.ToTable("Table1", True, "Field1")