2015年5月24日 星期日

VB.NET 應用篇


2018/05/12
參考資料:自訂數值格式字串
當我的資料是9.50,要格式化為9.5,可以使用String.Format來作,方法如下。
'記得要Imports System.Globalization
String.Format(CultureInfo.InvariantCulture, "{0:0.0}",CDbl("9.50").ToString))

2017/10/14
假設今天資料庫的資料某個欄位值與某家公司所規定的值不一樣,但你希望資料庫的資料可以跟某家公司所規定的值一樣,舉個例子,如下:
我的資料庫值1、2、3
1 代表 身心障礙人士子女(重度、極重度)
2 代表 身心障礙人士子女(中度)
3 代表 身心障礙人士子女(輕度)

某家公司規定的值A1、A2、A3
A1 代表 極重度/重度身心障礙人士子女
A2 代表 中度身心障礙人士子女
A3 代表 輕度身心障礙人士子女

如果我要把我的值1、2、3,替換成A1、A2、A3,我們可以這樣作,如下:
Dim DType = New Dictionary(Of String, String)
DType.Add("1", "A1")
DType.Add("2", "A2")
DType.Add("3", "A3")

MsgBox(DType("1") & vbNewLine & DType("2") & vbNewLine & DType("3"))
'顯示出來的結果會是A1、A2、A3

2017/08/27
1.四捨五入
Dim d1 As Decimal = 4.69
Response.Write("d1=" & d1 & "<br/>")
Response.Write("d1/100=" & (d1 / 100) & "<br/>")
Response.Write("d1四捨五入到小數點第一位=" & Math.Round(d1, 1, MidpointRounding.AwayFromZero) & "<br/>")
Response.Write("d1四捨五入=" & Math.Round(d1, MidpointRounding.AwayFromZero) & "<br/>")
2.取得圖片高度、寬度
Dim b As System.Drawing.Bitmap = New System.Drawing.Bitmap(Server.MapPath("~/img/test.jpg"))
Response.write("Width=" & b.Width & " Height=" & b.Height)
b.Dispose()

2017/07/19
參考資料:Optional (Visual Basic)
有時候我會把一些常用到的程式碼寫成方法,要用的時候可以去呼叫它,呼叫方法時常需要給它很多參數資料,有些參數我不見得要給它值,希望它可以使用預設值,那我就可以在ByVal前面加上Optional,代表這個參數可有可無不見得要給它參數值,但是必須定義一個預設值給它,如下:
Sub fun1(ByVal a1 As Integer,Optional ByVal s1 As String = "s1", Optional ByVal s2 As String = "s2",Optional ByVal us_a1 As UShort = 0)
...
End Sub
如果在呼叫的過程中,我只想給s2這個參數給它一個值,那我可以這樣子給s2值,如下:
'方法1
fun1(100,s2:="Hello")
'方法2
fun1(100, ,"Hello")
我個人比較喜歡方法1,比較明確。

2017/06/27
判斷日期是否有效,例如:2017/06/27。
Dim str_date As String="2017/06/27"
If (IsDate(str_date)) = False Or (IsDate(str_date) = True And (str_date.Length < 10 Or str_date.Length > 10)) Then
'錯誤
Else
'符合2017/06/27
End If

2016/02/22
判斷IP是否有效。
  If Net.IPAddress.TryParse("140.130.192.3", Nothing) Then
    '有效
  Else
    '無效
  End If

2016/01/31
CheckBoxList項目存不存在
  If CheckBoxList1.Items.FindByValue("A") IsNot Nothing Then
    '存在
  Else
    '不存在
  End If

2015/12/13
VB.NET Winform 使用MoveDirectory(移動目錄)
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    '將Directory1目錄(包含裡面的檔案)搬移到Directory2目錄
    '補充:如果你想要搬移資料夾且修改資料夾的名稱,你可以將C:\Directory2\Directory1改為C:\Directory2\ABC
    My.Computer.FileSystem.MoveDirectory("C:\Directory1", "C:\Directory2\Directory1")
  End Sub

2015/06/29
參考:規則運算式語言-快速參考Regex.IsMatch 方法
用正規表示式判斷是否為數字
     If Regex.IsMatch("123", "^\d+$") = False Then '數字會回傳true
        '不是數字
     Else
        '是數字
     End If

2015/05/25
1.取得星期幾
        Dim objd1 As Date = New Date()
        objd1 = "2014-12-01 08:52"
        Response.Write("objd1=" & objd1.ToString("yyyy/MM/dd HH:mm:ss") & "<br/>")
        'Weekday方法 會回傳 1是星期日 2是星期一 3星期是二 4是星期三 5是星期四 6是星期五 7是星期六
        Dim int_weekday As Integer = Weekday(objd1)
        int_weekday = int_weekday - 1 '減1後 0星期日 1星期一 2星期二
        If Not (int_weekday = 0 Or int_weekday = 6) Then
            Response.Write("不是,星期日或星期六")
        Else
            Response.Write("是,星期日或星期六")
        End If

2015年5月4日 星期一

ASP.NET WebForm 應用篇


2018/03/44
1.GridView在Eval中設定日期時間格式為yyyy/MM/dd HH:mm:ss。
<%# Eval("date_time", "{0:yyyy/MM/dd HH:mm:ss}")%>

2017/10/14
1.取得從哪一個網頁過來的。
Page.Request.UrlReferrer.AbsoluteUri
2.取得從哪一個網頁過來的,只取網頁名稱。
System.IO.Path.GetFileName(Page.Request.UrlReferrer.AbsolutePath)

2016/01/07
1.使用Regex正規表示Split字串切割。
Dim str_array1() As String = Regex.Split("1.題目1<br/>2.題目2<br/>3.題目3<br/>4.題目4", "\<br\/\>")
For x1 As Integer = 0 To str_array1.Length - 1
Response.Write(str_array1(x1) & "<br/>")
Next

C#寫法
string[] str = Regex.Split("AAA<p>BBB<p>DDD",@"\<p\>");
Response.Write(str[0] + ";" + str[2] + ";" + str[1]);

2015/10/29
1.Cookie儲存中文,輸出後亂碼。
Response.Cookies("test1").Value=HttpUtility.UrlEncode(TB_title.Text)'寫入
Label1.Text=HttpUtility.UrlDecode(Request.Cookies("test1").Value)'輸出

2.清除某個cookie。
If Not Request.Cookies("test1") Is Nothing Then
Response.Cookies("test1").Expires = DateTime.Now.AddDays(-1) '設定cookie到期日,過期
End If

2015/05/05
設定GridView裡的某個Label顏色,但已16進位設定。
GridView1_RowDataBound事件寫入:
If e.Row.RowType = DataControlRowType.DataRow Then
Dim L1 As Label = CType(e.Row.FindControl("L1"), Label)
Dim c1 As New ColorConverter
L1.ForeColor = CType(c1.ConvertFromString("#FF9900"), Color)
End If

2015年3月17日 星期二

ASP.NET DataList控制項 ItemDataBound 資料繫結事件

2015/03/18

    Private Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
            '每跑一筆資料將會經過此區域
            'CType(e.Item.DataItem, DataRowView).Item("chk_cod").ToString '取得某個欄位資料
            'CType(e.Item.FindControl("DropDownList1"), DropDownList) '取得DataList1 某個控制項
           If IsDBNull(CType(e.Item.DataItem, DataRowView).Item("a1")) Then '此欄位是NULL
           End If
        End If
    End Sub

2015年2月10日 星期二

VB.NET 使用GMail寄信

參考資料:[ASP.NET 3.5] 使用 Gmail 寄信, 請問下面程式錯在哪裡 ?

大學時期專題所寫到的程式碼,在此作個紀錄。

Imports System.Net
Imports System.Net.Mail
Imports System.Text.RegularExpressions

         Sub Send_EMail(ByVal Recipient As String, ByVal M_Subject As String, ByVal M_Content As String,  ByVal S_Account As String, ByVal S_Name As String, ByVal S_Password As String, Optional ByVal Filepath() As String = Nothing)
            'Recipient收件者,M_Subject主旨,M_Content內容,'S_Account寄件人帳號,S_Name寄件人名稱,S_Password寄件人密碼,Filepath儲存在Server檔案上的路徑
            '==============================================
            '傳過來的寄信內容,請先處理完後再傳進M_Content變數-處理寄信內容
            '==============================================
            If Recipient = "" Then
                Exit Sub
            Else
               'mail格式不符,就不送出
               If Regex.IsMatch(as_to, "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*") = False Then
                    Exit Sub
               End If
            End If
            Dim eMail As New MailMessage()
            Dim attach As Attachment = Nothing
            eMail.IsBodyHtml = True
            'System.Net.Mail.MailAddress("寄件人的Gmail帳號@gmail.com", "寄件人名稱", System.Text.Encoding.UTF8)
            eMail.From = New System.Net.Mail.MailAddress(S_Account, S_Name, System.Text.Encoding.UTF8)
            eMail.SubjectEncoding = System.Text.Encoding.UTF8 '主旨編碼方式
            eMail.BodyEncoding = Encoding.UTF8 '內容編碼方式

            eMail.To.Add(New MailAddress(Recipient)) '收件者
            eMail.Subject = M_Subject '主旨
            eMail.Body = M_Content '內容

            '====================================
            '附加檔案
            If Not Filepath Is Nothing Then
                For i As Integer = 0 To Filepath.Length - 1
                    If Filepath(i) <> "" Then
                        attach = New Attachment(Filepath(i))
                        eMail.Attachments.Add(attach) '附加檔案
                    End If
                Next
            End If
            '====================================
            Dim client As System.Net.Mail.SmtpClient = New System.Net.Mail.SmtpClient()
            client.Port = 587 '使用GMail,port必須使用587(25也可以),如果有其他的,例如:yahoo,hotmail等等,必須使用它們各自的port
            client.Host = "smtp.gmail.com" '使用GMail,如果有其他的,例如:yahoo,hotmail等等,必須使用它們各自的host
            client.EnableSsl = True '需要啟用SSL加密
            client.UseDefaultCredentials = False
            'client.Credentials = New System.Net.NetworkCredential("你的帳號@gmail.com", "你的gmail密碼")
            client.Credentials = New System.Net.NetworkCredential(S_Account, S_Password)

            client.Timeout = 500000 '建議5分鐘
            client.Send(eMail)

            If Not attach Is Nothing Then
                attach.Dispose()
            End If
            eMail.Dispose()
        End Sub


Step 1.然後在Button1_Click上呼叫Send_EMail並帶入參數,如下:

Send_EMail("要寄給誰的mail", "這裡是主旨", "哈囉~這裡是內容", "您的gmail帳號(例如:test@gmail.com)", "測試有限公司", "您的gmail密碼")


Step 2.最後請到您的GMail帳戶作設定,找到「安全性較低的應用程式」預設是關閉,請設定為開啟。


上述設定作完後,請測試是否成功寄信。

2015年1月26日 星期一

VB.NET 字數限制



        Dim str_temp As String = String.Empty, maxlength As Integer = 50, a1 As Integer = 0, a2 As Integer = 0
        Dim n As System.Text.ASCIIEncoding = New System.Text.ASCIIEncoding()
        Dim b() As Byte = Nothing
        b = n.GetBytes(TextBox2.Text)
        For i As Integer = 0 To b.Length - 1
            If b(i) = 63 Then
                a1 = a1 + 1
            Else
                a2 = a2 + 1
            End If
        Next

        Response.Write("byte長度:" & b.Length & ";全形(包含中文字、標點符號)=" & a1 & ";半形(英文字、標點符號)=" & a2)


以上有錯誤請指正,謝謝

2015年1月23日 星期五

ASP.NET DropDownList 程式碼新增Item



            Dim dt1 As DataTable=Nothing
            ....假設dt1已經從資料庫中取回項目資料....
            DropDownList1.DataTextField = "html_text" '顯示在網頁上的項目名稱
            DropDownList1.DataValueField = "value"  '項目的值
            DropDownList1.DataSource = dt1.DefaultView
            DropDownList1.DataBind()  '資料繫結
            '資料繫結後在DropDownList第一個項目前,再插入新的項目
            DropDownList1.Items.Insert(0, New ListItem("請選擇審核人", "0"))

2015年1月20日 星期二

[ASP.NET for VB.NET] String.Trim 無法刪除空白字元

參考資料1.Trimming Character Strings
參考資料2.魔鬼般的細節:使用 C# 的 String.Trim() 方法刪除空白字元

有時候會因為複製Excel檔裡的資料,貼到自己的程式中執行,在複製過來的資料中可能因為排版的關係,而產生一些特殊字元,使得您再怎麼刪除空白字元都無法刪除,解決辦法如下。

        Dim str_data As String = "   ABCDE      "
        Dim whiteSpaceDelimiters() As Char = _
        {ChrW(&H9),ChrW(&HA),ChrW(&HB),ChrW(&HC),ChrW(&HD),ChrW(&H20), _
          ChrW(&HA0),ChrW(&H2000),ChrW(&H2001),ChrW(&H2002),ChrW(&H2003), _
          ChrW(&H2004),ChrW(&H2005),ChrW(&H2006),ChrW(&H2007),ChrW(&H2008), _
          ChrW(&H2009),ChrW(&H200A),ChrW(&H200B),ChrW(&H3000),ChrW(&HFEFF) _
        }
        str_data = str_data.Trim(whiteSpaceDelimiters)
        Response.Write("[" & str_data & "]")


        '如果是C#
        'char[] whiteSpaceDelimiters = new char[]
        '{
        ''\u0009’,  // CHARACTER TABULATION
        ''\u000A’,  // LINE FEED
        ''\u000B’,  // LINE TABULATION
        ''\u000C’,  // FORM FEED
        ''\u000D’,  // CARRIAGE RETURN
        ''\u0020’,  // SPACE
        ''\u00A0’,  // NO-BREAK SPACE
        ''\u2000’,  // EN QUAD
        ''\u2001’,  // EM QUAD
        ''\u2002’,  // EN SPACE
        ''\u2003’,  // EM SPACE
        ''\u2004’,  // THREE-PER-EM SPACE
        ''\u2005’,  // FOUR-PER-EM SPACE
        ''\u2006’,  // SIX-PER-EM SPACE
        ''\u2007’,  // FIGURE SPACE
        ''\u2008’,  // PUNCTUATION SPACE
        ''\u2009’,  // THIN SPACE
        ''\u200A’,  // HAIR SPACE
        ''\u200B’,  // ZERO WIDTH SPACE
        ''\u3000’,  // IDEOGRAPHIC SPACE
        ''\uFEFF’  // ZERO WIDTH NO-BREAK SPACE
        '};