2009年4月8日 星期三

How to Add GAC Assembly to VS.NET (如何將GAC組件加到VS.NET)

當一個共用組件被設計成要放在GAC給很多應用程式共用時,當直接將組件註冊到GAC之後,使用VS.NET開發時,在專案中要加入組件參考還是得要利用專案的方式,或是瀏覽的方式去找到dll,然後再把他加入參考。

如果很多個專案的話,這樣的動作就會顯得有點煩雜以及沒效率,因為如果dll位置改變的話,就要再重新瀏覽一次。那麼,最好是的方式就是除了將dll註冊到GAC之外,另外一個就是讓它可以在加入參考的那個頁籤中的.NET頁籤出現,以方便直接加入GAC組件。

那麼如何將GAC組件加到VS.NET呢?有一個最簡單的方式,首先,將dll組件先註冊到GAC,接著,將這個組件搬到以下路徑即可:

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies

接著以後使用VS.NET設計專案時,要加入此組件就可以從加入參考視窗中的.NET頁籤中,直接將之加入了。

2009年3月22日 星期日

Are you ASP.NET 3.5 (aspx) or JSP? (In IIS7)

這禮拜在淡大資訊中心授課,介紹到ASP.NET 的HttpRuntime的觀念以及設計,突然想起百敬老師之前曾經說過的一個故事,也就是偽裝程式,簡單來說就是使用設計ASP.NET應用程式(aspx的附檔名),但是在系統上線時,將所有的副檔名改變為 jsp的副檔名,讓使用者瀏覽網頁時看到的是JSP的網頁程式。

或許這個技術並不是最新的,但現在想起來卻是很有趣,因此在淡大上課時,就突然一時興起,教了這一招有趣的小技巧,不過,這邊有一些設定與IIS的版本有別,windows 2008 和Vista中的IIS7.0和windows2003 的IIS6,在IIS的設定上介面有些許的不同。亞當斯的NB裝的是Vista,所以我先示範IIS7的設計方式好了。

首先,建立一個位在IIS上的網站,並設計一些aspx可以快速達到的功能,例如使用ListView針對資料庫的資料實作新、刪、修、查功能。

01-一般aspx的功能

接著設定IIS中的"處理常式對應",將jsp副檔名的對應直接選用aspx所對應的,最簡單的方式就是先找到aspx所對應的處理常式,然後將之複製一份給jsp附檔名來對應,如下圖所示:

02-IIS中aspx對應的處理常式 03-IIS中jsp對應的處理常式

此時因為ASP.NET 3.5會使用JIT的編譯方式執行,所以在網站動態編譯網頁程式時,必須讓它認得jsp副檔名所對應的編譯提供者應該跟aspx一樣,這邊設定為"PageBuildProvider"。因此可以在web.config中設定buildProviders項目。

<compilation debug="false">
<buildProviders>
<add extension=".jsp"
type="System.Web.Compilation.PageBuildProvider"
/>
</buildProviders>
</compilation>


設定好之後就大功告成了,最後就是把aspx直接改為jsp就好。咱們來瀏覽JSP網頁吧,注意看下列網址中的副檔名是JSP唷,嘻嘻!!(這次的偽裝真成功,ㄎㄎ,以後想要設計什麼系統盡管告訴亞當斯,嘿嘿),^_^


04-JSP網頁 

2008年12月3日 星期三

設計可拖拉圖片(DragDrop Image)的Winform表單程式

如果想要在Winform中設計讓使用者可以拖拉圖片的功能,那麼就可以叫用PictureBox控制項的DoDragDrop方法來初始化拖曳作業,DoDragDrop方法需要兩個參數:一為代表正準備複製至DataObject的資料物件,另一個是指定此資料所允許之拖曳效果的DragDropEffects執行個體。

亞當斯來說明以一下此功能的設計步驟:

  1. 先準備一個Form表單,將準備移動的圖片(圖片中主角就是亞當斯最引以為傲,會寫Cat#的MiMi)先加到專案中,這邊亞當斯把圖片加入到專案的資源檔中,並且設定為內崁。ImageDragDrop01
  2. 在From畫面上配置兩個PictureBox控制項,先把左邊的PictureBox控制項Image圖片來源,設定為加入資源檔的圖片,右邊的PictureBox則不做任何設定。ImageDragDrop02
  3. 接下來這個步驟很重要因為PictureBox控制項的AllowDrop屬性沒辦法直接在設計的屬性視窗中設定,所以必須先在Form1表單的Load事件中,將目標PictureBox的AllowDrop屬性設定為True,接著在準備要拖曳的PictureBox之MouseDown事件中起始拖曳作業,程式碼如下:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      '設定PictureBoxRight可以允許拖拉
      PictureBoxRight.AllowDrop = True
    End Sub
    Private Sub PictureBoxLeft_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBoxLeft.MouseDown
      If PictureBoxLeft.Image IsNot Nothing Then
        PictureBoxLeft.DoDragDrop(PictureBoxLeft.Image, DragDropEffects.Move)
      End If
    End Sub



  4. 設定拖放作業中的目標PictureBox置放效果,先用DragEventArgs物件Data屬性的GetDataPresent方法判斷為圖片,再設定DragDropEffects列舉常數(亞當斯的這個範例是使用:Move)。
    Private Sub PictureBoxRight_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBoxRight.DragEnter
      If e.Data.GetDataPresent(DataFormats.Bitmap) Then

        e.Effect = DragDropEffects.Move

      End If

    End Sub



  5. 在目標的PictureBox之DragDrop事件中,設定PictureBox的Image屬性為拖曳過來的圖片。
    Private Sub PictureBoxRight_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles PictureBoxRight.DragDrop 

      If e.Data.GetDataPresent(DataFormats.Bitmap) Then
        PictureBoxRight.Image = CType(e.Data.GetData(DataFormats.Bitmap), Image)

        PictureBoxLeft.Image = Nothing

      End If

    End Sub



  6. 設計好表單後,執行程式,並且將左邊的PictureBox圖片直接拖曳到右邊的PictureBox,喔耶~成功了!!不過亞當斯只有撰寫從左邊拉到右邊的功能唷,如果你想要再從右邊拉到左邊,那麼就如法泡製整個設計步驟即可^_^。ImageDragDrop03

2008年11月11日 星期二

ToolStrip控制項(2)-ToolStripButton和ToolStripProgressBar應用

ToolStripButton是可包含文字和影像的可選取項目,透過ToolStripButton可以建立同時支援文字和影像的工具列按鈕,最主要的事件當然就是Click事件囉,因為畢竟ToolStripButton與一般按鈕的預作方式雷同。

亞當斯來做個簡單示範,首先先拉一個Timer控制項到表單畫面中,設定Interval屬性為500(0.5秒的意思)。接著表單中先加入ToolStrip控制項,新增一個ToolStripButton,並且直接雙擊滑鼠,在Click的事件程序中加入啟用計時器的程式碼即可。

Timer1.Enabled = True

ToolStripProgressBar 控制項從視覺上指示長時間作業的進度,會以不同色彩由左到右填滿的形式列來顯示作業進度。 要特別注意的是:ToolStripProgressBar 只能置於水平方向,通常我們會用ToolStripProgressBar 來顯示一些需要長時間進行動作的進度監控或顯示資訊,讓使用者可以得知目前系統的作業進度為何,例如:下載檔案、複製檔案或是存取大量資料、列印文件等等。

如果要修改ToolStripProgressBar顯示的數值,並不一定要直接變更 Value 屬性,可以使用Step屬性來指定Value將要遞增的特定數值,再呼叫PerformStep方法來遞增。若要讓遞增數值有所變化,則可以使用 Increment 方法,並指定用來遞增 Value 屬性的值。接著亞當斯在ToolStrip中加入ToolStripProgressBar,並且設定相關屬性:

  • Maximum:100
  • Minimum:0
  • Step:10
  • Style:Continuous

然後在Timer的Tick事件中,加入以下程式碼,去改更ToolStripProgressBar顯示的數值:
ToolStrip04

將應用程式執行,並且按下ToolStripButton啟動計時器,就可以看到ToolStripProgressBar的數值會有所變化了。
ToolStrip05

2008年11月10日 星期一

ToolStrip控制項(1)-ToolStrip設計簡介

ToolStrip控制項為 Windows 工具列物件提供容器,類似VS.NET2003開發WinForm的ToolBar控制項,基本上在VS2008設計WinForm會希望用ToolStrip來取代ToolBar,不過基本上還是相容的。

ToolStrip控制項中主要有幾大類的控制項可以設定,分別為:

  • ToolStripButton:近似於熟知的Button控制項,以按鈕的型態呈現在工具列上。按下按鈕會觸發並執行ToolStripButton.Click事件處理常式裡的程式。
  • ToolStripLabel:包含Label控制項,以及LinkLabel控制項的功能,當其IsLink屬性為False時,只會在工具列上顯示Text屬性裡包含的文字。而當IsLink屬性為True時,ToolStripLabel控制項便會類似於LinkLabel控制項。
  • ToolStripSeparator:ToolStripSeparator控制項是用來區隔工作列不同群組項目使用的控制項。
  • ToolStripSplitButton:結合ToolStripButton控制項,以及ToolStripDropDownButton控制項的功能,它包含一個獨立的按鈕以及一個下拉式選單,各自均有獨立的滑鼠點擊事件,ToolStripSplitButton.Click事件是用來回應按鈕點擊,而ToolStripMenuItem.Click則可用來回應功能表裡每一個選項的點擊動作。
  • ToolStripDropDownButton:允許為按鈕建立一個對應的下拉式選單。
  • ToolStripComboBox:近似於ComboBox控制項,支援Simple、DropDown以及DropDownList等不同的樣式,此外,也透過Items集合來管理其所屬的清單項目。
  • ToolStripTextBox:與TextBox控制項非常相似,與TextBox控制項最大的差異是,ToolStripTextBox控制項並不支援MultiLine屬性。
  • ToolStripProgressBar:與標準的ProgressBar控制項近似,ToolStripProgressBar控制項的外觀由Style屬性決定。可以透過叫用Increment以及PerformStep這兩個方法來改更進度。下列為Style屬性設定值:

    Blocks:增加 ProgressBar 中的分段區塊數,以表示進度
    Continuous: 增加 ProgressBar 中的平滑連續列大小,以表示進度
    Marquee:以跑馬燈形式在 ProgressBar 中連續捲動區塊,以表示進度

如果在表單中把ToolStrip中每一種都加入的話,看起來應該會像以下圖形,按照順序分別為ToolStripButtonToolStripLabelToolStripSplitButtonToolStripDropDownButtonToolStripComboBoxToolStripTextBoxToolStripProgressBar。

ToolStrip01這樣的設計方式都然要自己去設定控管這些項目的功能為何,其實 ToolStrip預設有提供一組系統常用且已經設定好的工具列按鈕,讓開發者直接使用,不過要加入這個預設的功能,可是讓亞當斯找好久,熊熊忘記要設定哪個地方才能加入,後來發現,原來遠在天邊,近在眼前啊!

只要對著ToolStrip按下右鍵,選擇插入標準項目即可。

ToolStrip02

插入後,就會有一組標準的系統工具列可以使用了。
ToolStrip03