RSS

Category Archives: Microsoft .NET

VB.NET 正则表达式应用(简单实例)

    程序里经常会对字符串进行操作,有时候要对字符串进行特殊处理或是用简短高效的代码处理,就会用到正则表达式。
    例子:比如把界面中的数据登录到数据库中,这时候就要判断输入的字符串是否合法,不然登录输入的字符串(如引号)就会报错。下面的代码中就是在VB.NET中用正则表达式来判断Email,URL,IP,自定义特殊字符的检查与否。


Imports
System.Text.RegularExpressions
Public Class frmRegular
    Private Const C_REGULAR_EMAIL = "^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$" ‘\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    Private Const C_REGULAR_URL = "[a-zA-z]+://[^\s]*"
    Private Const C_REGULAR_IP = "\b((25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\b"
    Private Sub btnCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheck.Click
        If txtRegular.Text.Trim.Length = 0 Then Exit Sub
        Dim strPattern As String = String.Empty
        Dim strCheckedText As String = String.Empty
        If rdoEmail.Checked Then
            strPattern = C_REGULAR_EMAIL
            strCheckedText = rdoEmail.Text
        ElseIf rdoURL.Checked Then
            strPattern = C_REGULAR_URL
            strCheckedText = rdoURL.Text
        ElseIf rdoIP.Checked Then
            strPattern = C_REGULAR_IP
            strCheckedText = rdoIP.Text
        End If
        If funCheckRegular(strPattern) Then
            MsgBox(strCheckedText + ": It’s Right", MsgBoxStyle.Information, Me.Text)
        Else
            MsgBox(strCheckedText + ": Wrong!!!", MsgBoxStyle.Exclamation, Me.Text)
        End If
    End Sub
    Private Function funCheckRegular(ByVal strPattern As String)
        Return Regex.IsMatch(txtRegular.Text.Trim, strPattern)
    End Function
    ‘自定义要检查的字符
    Private Sub subCustomSpecialCheck()
        ‘Insert SQL文中的特殊字符:引号(‘)或反斜杠(\)
        Dim strPatternSearchVal As String = "’|\\"
        Dim strInput As String = "The cat saw the other cats playing in the back yard.INSERT ‘OK?"
        Dim match As Match = Regex.Match(strInput, strPatternSearchVal)
        If match.Success = True Then
            MsgBox("含有特殊文字【" + match.Value + "】。", MsgBoxStyle.Exclamation, Me.Text)
        Else
            MsgBox("没有特殊文字。", MsgBoxStyle.Information, Me.Text)
        End If
    End Sub
    Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
        txtRegular.Text = String.Empty
    End Sub
End Class
————————————————————————————————–
http://www.regexplib.com
正则表达式工具:
               1:RegexBuddy
               2:RegEx-TestBed

 
留下评论

Posted by 于 2010/08/26 15:47:34 在 Microsoft .NET

 

标签:

VB.NET 同一Form中多语言切换并读取资源文件

执行效果↓(下拉列表中选择英文,日文,中文即时改变(不重启)。不是New一个Form,用ComponentResourceManager在同一Form中切换。)

———————————————————————————————————————————————————–
    下面介绍下多语言在同一Form中的切换,以及读取[系统生成的资源文件]和[自定义资源文件]。先建立一个VB的Windows Application工程,在工程里建一个Form(FrmMain),在Form中建一个Lable(LabLanguageName);然后建4个自定义的资源文件(Resource_Common.resx,Resource_en-US.resx,Resource_ja-JP.resx,Resource_zh-Cn.resx),工程目录结构如下图:
工程Form↓                                                                工程目录↓
 
一、建好工程以后,是不会生成像上图的多语言文件的(FrmMain.en-US.resx,FrmMain.ja-JP.resx,FrmMain.zh-CN.resx),怎么生成的呢?
1:选中Form,设定Language=[本地化语言],和Localizable=[True]。(这样还不能生成如上文件,请看下一步)

2:选中Form中的Lable,Text设成[中文],保存。这样就生成了文件了(FrmMain.zh-CN.resx)。
  双击打开FrmMain.zh-CN.resx →
二、对[系统生成的资源文件]和[自定义资源文件]读取
    Imports System.Resources
    Public Const CNT_RESOURCE_EN As String = "MultilingualApp.Resource_en-US"
    Public Const CNT_RESOURCE_JP As String = "MultilingualApp.Resource_ja-JP"
    Public Const CNT_RESOURCE_CN As String = "MultilingualApp.Resource_zh-CN"
    Public Const CNT_RESOURCE_COMMON As String = "MultilingualApp.Resource_Common"
    Public Function GetCurrentResourcesMessage(Optional ByVal strResourceFile As String = "")
        ‘读取上图的①:系统生成的资源文件
        ‘Dim rm As New ResourceManager("MultilingualApp.Resources", Me.GetType().Assembly)
       
‘读取上图的②:自定义的资源文件
        Dim rm As Resources.ResourceManager = Nothing
        If strResourceFile = String.Empty Then
            rm = New Resources.ResourceManager(CNT_RESOURCE_COMMON, Reflection.Assembly.GetExecutingAssembly())
        ElseIf Not strResourceFile = String.Empty Then
            rm = New Resources.ResourceManager(strResourceFile, Reflection.Assembly.GetExecutingAssembly())
        Else
            ‘Nothing
        End If
        Return rm
    End Function
代码太长就不贴出来了,还是自己下载整个工程的代码吧:MultilingualApp.rar

 
留下评论

Posted by 于 2010/08/14 16:47:53 在 Microsoft .NET

 

标签: , ,

VB.NET 修改注册表(例:IE项)

Imports Microsoft.Win32

Zones 项包含表示为计算机定义的每个安全区域的项。
1    本地   Intranet   区域
2    受信任的站点区域
3    Internet   区域 
4    受限制的站点区域

Public regPath As String = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\"
Public regFileDownd As String = "1803"文件下

Public regFileDowndPrompt As String = "2200"文件下载自动提示

Private Sub btnSetIE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetIE.Click

   Dim strFileDowndVal As String

   Dim strFileDowndPromptVal As String

   取得原本IE中的【文件下】,【文件下载自动提示】值

   strFileDowndVal = funGetRegeditValue(regPath, regFileDownd)

   strFileDowndPromptVal = funGetRegeditValue(regPath, regFileDowndPrompt)

   将【文件下】,【文件下载自动提示】值生成有效(0

   Call subSetNewIEDownloadProperty()

   原原本IE中的【文件下】,【文件下载自动提示】值

   Call subSetOriginalIEDownloadProperty(strFileDowndVal, strFileDowndPromptVal)

End Sub

取注册表项的值
Public Function funGetRegeditValue(ByVal regPath As String, ByVal regName As String)

   Dim reg As RegistryKey

   Dim strReturn As String = String.Empty

   reg = Registry.CurrentUser

   reg = reg.OpenSubKey(regPath, True)

   strReturn = reg.GetValue(regName)

   funGetRegeditValue = strReturn

End Function

设置注册表项的值
Public
Sub subSetRegeditValue(ByVal regPath As String, ByVal regName As String, ByVal regValue As String)

   Dim reg As RegistryKey

   reg = Registry.CurrentUser

   reg = reg.OpenSubKey(regPath, True)
   每个DWORD值等于013。通常,设置为0则将具体操作设置为允许;设置为 1则导致出现提示;设置为 3则禁止执行具体操作

   reg.SetValue(regName, regValue, RegistryValueKind.DWord)

End Sub

设定【文件下】,【文件下载自动提示】为有效

Public Sub subSetNewIEDownloadProperty()

   Call subSetRegeditValue(regPath, regFileDownd, "0")

   Call subSetRegeditValue(regPath, regFileDowndPrompt, "0")

End Sub

还原IE最初设定值 

Public Sub subSetOriginalIEDownloadProperty(ByVal OriginalFileDowndVal As String, ByVal OriginalFileDowndPromptVal As String)

   Dim strFileDownd As String

   Dim strFileDowndPrompt As String

   strFileDownd = funGetRegeditValue(regPath, regFileDownd)

   strFileDowndPrompt = funGetRegeditValue(regPath, regFileDowndPrompt)

 

   If Not OriginalFileDowndVal.Equals(strFileDownd) Then

      Call subSetRegeditValue(regPath, regFileDownd, OriginalFileDowndVal)

   End If

   If Not OriginalFileDowndPromptVal.Equals(strFileDowndPrompt) Then

      Call subSetRegeditValue(regPath, regFileDowndPrompt, OriginalFileDowndPromptVal)

   End If

End Sub

 
留下评论

Posted by 于 2010/08/11 3:26:33 在 Microsoft .NET

 

标签: ,

在DataGridView中第一时间获得CheckBox的值

在DataGridView中的CheckBox点下后往往不能第一时间取得CheckBox值,或在其他事件中要移开后才能取得CheckBox值。下面方法可以在点下CheckBox后直接获得CheckBox的正确值。

    Private Sub DataGridView_CurrentCellDirtyStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView.CurrentCellDirtyStateChanged

        将当前单元格中的更改提交到数据缓存,但不结束编辑模式

        DataGridView.CommitEdit(DataGridViewDataErrorContexts.CurrentCellChange)

        当前列

        Dim intCurrentCol As Integer = DataGridView.CurrentCell.ColumnIndex

        第一列

        If intCurrentCol = 0 Then

            打钩背景为绿色,不打钩背景为黄色

            If DataGridView.Rows.Item(DataGridView.CurrentRow.Index).Cells(intCurrentCol).Value = True Then

                DataGridView.BackgroundColor = Color.Blue

            Else

                DataGridView.BackgroundColor = Color.Yellow

            End If

        End If

End Sub
 

 
留下评论

Posted by 于 2010/06/26 12:26:46 在 Microsoft .NET

 

标签: , ,

VB.NET 通常用法使用笔记

  ‘解决直接对DataTable排序无效的问题
    
‘例如:要对dtOrderData进行排序,直接用.DefaultView.Sort的话排序是无效的。
      ‘无效用法   
     
dtOrderData.DefaultView.Sort =
"ID_ORD Asc"
      ‘有效用法
      Dim dvSort As New DataView 
      dvSort = dtOrderData.DefaultView
      dvSort.Sort = "ID_ORD Asc"
      dtOrderData = dvSort.ToTable
●  ‘

DataTable中筛选数据()
    Dim strFilter As String
    Dim strSearchVal As String = "
查询值"
      strFilter = "字段名 = ‘" + strSearchVal  + "’"
   
克隆 dtInfo (DataTable) 的结构
   
Dim dtFilterTable As DataTable = dtInfo.Clone
   
[字段名]查询值的数据都筛选出来
    For Each foundRows As DataRow In dtInfo.Select(strFilter)
        dtFilterTable.ImportRow(foundRows)
    Next
 
DataTable中取唯一值;相当于SQL文的DISTINCT效果
    Dim dtFilterDistinct As New DataTable
    dtFilterDistinct = dtInfo.DefaultView.ToTable(True, New String() {"ID", "NAME"})
  合并单元格,居中
    xlSheet.Cells.Range("B1:C1").Merge()
    xlSheet.Cells.Range("B1").Columns.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter
 
补粗线框
    xlSheet.Range("A1:E1").BorderAround(, Excel.XlBorderWeight.xlMedium)
  画细线框(详细)
    With xlApp.ActiveSheet.Range("A1:E1").Borders(Excel.XlBordersIndex.xlEdgeTop)
        .LineStyle = Excel.XlLineStyle.xlContinuous
        .Weight = Excel.XlBorderWeight.xlThin  ‘xlMedium
        .ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic ‘xlAutomatic
    End With
 
增加一行
    xlSheet.Rows("10:10").Insert(Shift:=Excel.XlDirection.xlDown)
 
删除有数据的最后一行
    xlSheet.Rows(xlSheet.UsedRange.Rows.Count).Delete()
  加快写Excel数据速度:自动重新计算工作表(写数据前关)
    xlSheet.EnableCalculation = False
   
加快写Excel数据速度:自动重新计算工作表(保存数据前开)
      xlSheet.EnableCalculation = True

  ”’ <summary>
    ”’ 将数字列转换为字母
    ”’ </summary>
    ”’ <param name="inCol">传入列数</param>
    ”’ <returns>返回传入列数的所在列字母</returns>
    Function GetNoToAbcCol(ByVal intCol As Integer) As String
        intCol –= 1
        Dim chars As New List(Of String)
        Do
            If (chars.Count > 0) Then
                intCol –= 1
            End If
            chars.Insert(0, Chr(intCol Mod 26 + Asc("A")))
            intCol = intCol \ 26
        Loop While intCol > 0
        Return String.Join(String.Empty, chars.ToArray)
    End Function

  ”’ <summary>
    ”’将字母列转换为数字
    ”’ </summary>
    ”’ <param name="strRangeCol">传入字母列</param>
    ”’ <returns>返回传入字母列的所在列数字</returns>
    Function GetAbcToNoCol(ByVal strRangeCol As String) As Integer
        Dim returnVal As Integer = –1
        strRangeCol = UCase(strRangeCol)
        If strRangeCol.Length = 1 Then
            returnVal = Asc(strRangeCol) Mod 64
            Return returnVal
        ElseIf strRangeCol.Length = 2 Then
            returnVal = (Asc(Left(strRangeCol, 1)) Mod 64) * 26 _
                       + Asc(Right(strRangeCol, 1)) Mod 64
            Return returnVal
        Else
        End If
    End Function 

 
”’ <summary>
    ”’以星期天为界,算每个月有几周,从几号到几号。
    ”’ </summary>
    ”’ <param name="dateCurrentYMD">当前月</param>
    ”’ <returns></returns>

    Private Sub subWriteWeekTitle(ByVal dateCurrentYMD As Date)

        Dim arrMonth As New ArrayList

        Dim strStart As String = String.Empty

        Dim strEnd As String = String.Empty

        Dim y As Integer

        Dim m As Integer

        Dim iDays As Integer

        Dim FirstDayOfMonth As Date

        Dim FirstDayOfWeek As Date

        Dim iWeeks As Integer = 1

 

        y = CInt(Format(dateCurrentYMD, "yyyy"))

        m = CInt(Format(dateCurrentYMD, "MM"))

        iDays = Date.DaysInMonth(y, m)

        FirstDayOfMonth = Date.Parse(CStr(y) + "-" + CStr(m) + "-1")

        FirstDayOfWeek = FirstDayOfMonth

 

        本月的场合

        While (FirstDayOfWeek.Month = m)

            Dim LastDayOfWeek As Date

            strStart = "" + CStr(iWeeks) + ":" + getFormatM(FirstDayOfWeek) + "-"

 

            If (FirstDayOfWeek.Day + 7 > iDays) Then

                LastDayOfWeek = FirstDayOfWeek.AddDays(iDays – FirstDayOfWeek.Day)

                ‘Debug.Print(LastDayOfWeek.ToString("MM/dd"))

                strEnd = LastDayOfWeek.ToString("dd")

                arrMonth.Add(strStart + strEnd)

                Exit While

            Else

                LastDayOfWeek = FirstDayOfWeek

            End If

            循环一周天

            For iPlus As Integer = 1 To 7

                以星期天为界

                If LastDayOfWeek.DayOfWeek = DayOfWeek.Sunday And LastDayOfWeek.Month = m Then

                    ‘Debug.Print(LastDayOfWeek.ToString("MM/dd"))

                    strEnd = LastDayOfWeek.ToString("dd")

                    Exit For

                ElseIf LastDayOfWeek.Month = m + 1 Then

                    LastDayOfWeek = LastDayOfWeek.AddDays(-1)

                    ‘Debug.Print(LastDayOfWeek.ToString("MM/dd"))

                    strEnd = LastDayOfWeek.ToString("dd")

                    Exit For

                End If

                LastDayOfWeek = LastDayOfWeek.AddDays(1)

            Next

            iWeeks += 1

            FirstDayOfWeek = LastDayOfWeek.AddDays(1)

 

            arrMonth.Add(strStart + strEnd)

        End While

 

        For iWeek As Integer = 0 To arrMonth.Count – 1

            Debug.Print(arrMonth.Item(iWeek))

        Next

End Sub

 
2条评论

Posted by 于 2010/04/01 15:42:08 在 Microsoft .NET

 

标签: , ,