Visual stutio2005中新增加的代碼段(code snippet)功能大大提高了我們開發的速度,我們只要寫簡單的幾個字就可以實現一大段代碼的編寫,比如:
我們要寫MessageBox.Show();只要寫mbox然後再點兩下Tab鍵就可以了,這種作法叫做“可擴展式代碼段(Expension)”,除此之外,VS2005還支持”外圍式代碼段(surround with)”的功能,使用時,先用鼠標選中要處理的代碼,然後點右鍵,選中”外側代碼”,如下圖:
這裡會出現如下菜單:
我們要作的是在外側代碼提示下輸入你想要的代碼段,比如”if”,然後點一下TAB鍵,這時我們選中的代碼就會被外圍起來,如下圖:
在vs2005中,絕大多數的代碼都有代碼段功能.那麼大家就會問,我們能不能把自己常用的代碼也做成code snippet呢?
我們當然可以,那麼我們先要弄清楚MS已經實現的代碼段是怎麼寫的呢?
首先打開”工具->代碼片段管理器(或者按住ctrl 再連續按下k和b)”
選擇visual C#,並且展開
先來看看if語句的代碼片段,這裡可以看到它的路徑,是一個擴展名為.snippet的文件,我們把它打開,可以看到原代碼:
<?XML version="1.0" encoding="utf-8"?>
<CodeSnippets XMLns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>if</Title>
<Shortcut>if</Shortcut>
<Description>if 語句的代碼段</Description>
<Author>Microsoft Corporation</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>expression</ID>
<ToolTip>要計算的表達式</ToolTip>
<Default>true</Default>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[if ($expression$)
{
$selected$ $end$
}]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
大家可以看到,其實這個文件是一個XML文件,並且包含多個子節點,我們可以把這個XML文件的根合並,然後一級一級的分析:
這裡面包含兩個可以展開的子節點:<Header>子節點和<Snippet>子節點
<Header>子節點:用於表示當前Code Snippet文件的一些聲明信息,包括(“//”表示作者添加的注解):
<Title>if</Title>//代碼片段的標題
<Shortcut>if</Shortcut>//該代碼片段的快捷方式(也就是說你輸入什麼字母能出來)
<Description>if 語句的代碼段</Description>//輸入快捷方式後和提示
<Author>Microsoft Corporation</Author>//哪個公司出的
<SnippetTypes>
<SnippetType>Expansion</SnippetType>//指明該代碼段可以用作擴展的
<SnippetType>SurroundsWith</SnippetType>//指明該代碼段可以用作外圍的
</SnippetTypes>
<Snippet>子節點是代碼段的正文,其中包括兩個子節<Declarations>子節和<Code >子節,如下圖:
<Declarations>子節用於定義代碼變量,在該子節中可以包括多個<literal>子節,每一個<literal>子節都是一個變量,說到這裡,大家會問,難道CodeSnippet中還需要有變量嗎?是的,一定要有!原因如下:
當我們利用代碼段寫完一個語句塊時,總有一些內容是需要再次修改的,比如:輸入完if語句的代碼段之後,生成的代碼如下:
If語句的默認條件是true,用戶可能將其改為自己想要的條件,這時true就是一個變量,因此if語句就有一個變量.再比如說,輸入完for語句的代碼段後,代碼如下:
這裡用於循環計數的i可能會發生改變,表示循環的length也會被修改,因此length也是一個變量.在for語句的代碼段中就包括兩個參數.了解這些之後,我們來看一下,if語句中的參數是如何定義的,
<Literal>
<ID>expression</ID>//變量的名
<ToolTip>要計算的表達式</ToolTip>//變量的提示(當鼠標停留在變量上面)
<Default>true</Default>//默認的值
</Literal>
下面我們來說一下<Code >子節,該節是代碼段實現的正文,內容如下:
<Code Language="csharp"><![CDATA[if ($expression$)
{
$selected$ $end$
}]]>
</Code>
在該節中,Language屬性說明該代碼段是在C#語言中使用的.CDATA表示後面的內容為字符串.灰色的文字表示要輸出的文字,在要輸出的文字中,有兩種字符,一種是沒有任何標記的,如if,表示它將直接輸出.另外一種字符前後都有$符號,該符號表明這是一個前面定義好的變量,比如$expression$就是我們前面看到的<Literal>節中定義的那個變量,這種字符在輸出的時候會按著該變量的默認值輸出,這裡$expression$變量的默認值是true.
後面的$selected$ $end$標記表明在輸入完代碼段時,我們按下回車鍵中光標所處的位置.
經過上面的講解,大家應該明白代碼段是怎麼定義的了吧?:)
下面,我們來根據上面的經驗來自己定義一個代碼段吧.代碼如下:
<?XML version="1.0" encoding="utf-8"?>
<CodeSnippets XMLns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>def</Title>
<Shortcut>def</Shortcut>
<Description>defining a new object </Description>
<Author>www.MakingMyMoney.com</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<ID>DataType</ID>
<ToolTip>數據類型</ToolTip>
<Default>object</Default>
</Literal>
<Literal>
<ID>Variant</ID>
<ToolTip>變量</ToolTip>
<Default>var</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[$DataType$ $Variant$=new $DataType$();$selected$ $end$
]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
該代碼段實現的功能是幫助我們快速定義變量.我們可以想象一下,定義一個變量的時候,我們的代碼通常是這樣的:
DataSet ds = new DataSet();
這裡數據類型及構造函數是一個樣,並且可能是經常改變的,因此,我這裡將它定義為一個變量 “DataType”,另外上面一行代碼中的變量名也會改變,因此這裡又定義第二個變量” DataType”.
呵呵到這裡,另的我就不說了,大家一起學習一下吧.
'vb.Net2005的導出到Excel功能函數
Public Function ExportExcel(ByVal dgv As DataGridVIEw, ByVal IsOnlyVisible As Boolean) As Boolean
Try
Dim n, i, j, row, col As Integer
Dim excel As Excel.Application = New Excel.Application
Excel.Application.Workbooks.Add(True)
col = 1
'//記錄列名
For n = 0 To dgv.ColumnCount - 1
If IsOnlyVisible Then
If dgv.Columns(n).Visible Then
Excel.Cells(1, col) = dgv.Columns(n).HeaderText
col = col + 1
End If
Else
Excel.Cells(1, n + 1) = dgv.Columns(n).HeaderText
End If
Next
'//記錄內容
row = 2
' col = 1