明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP.NET可交互式位圖窗體設(shè)計(jì)(8)

[摘要]按鈕單擊事件處理程序   接下來就是每個(gè)按鈕的按鈕單擊事件處理程序。多數(shù)僅僅是向繪圖列表中添加一個(gè)新的可繪制對(duì)象,然后調(diào)用 PictureBox 上的 Invalidate,從而使用更新的繪圖列表進(jìn)行重繪。典型的按鈕事件處理程序代碼如下所示:   C# private vo...
按鈕單擊事件處理程序
    接下來就是每個(gè)按鈕的按鈕單擊事件處理程序。多數(shù)僅僅是向繪圖列表中添加一個(gè)新的可繪制對(duì)象,然后調(diào)用 PictureBox 上的 Invalidate,從而使用更新的繪圖列表進(jìn)行重繪。典型的按鈕事件處理程序代碼如下所示:
  
  
    C#
  private void AddPoint_Click(object sender, System.EventArgs e) {
  drawingList.Add(new DPoint(GetRandomPoint(), Color.Blue));
  Drawing.Invalidate();
  }
  
    Visual Basic
  
  .NET Private Sub AddPoint_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles AddPoint.Click
  drawingList.Add(New DPoint(GetRandomPoint(), Color.Blue))
  Drawing.Invalidate()
  End Sub
  
  
    Change fills to hot pink(將填充色更改為粉紅)按鈕有一些不同 -- 它在列表中獲得一個(gè)所有可填充對(duì)象的數(shù)組,然后將它們的畫筆顏色更改為粉紅。這部分代碼顯示在前面“返回可填充列表”一節(jié)的末尾。(此外還必須使 PictureBox 無效。)
  
    最后,Erase All(全部刪除)按鈕簡單地創(chuàng)建了一個(gè)新的繪圖列表,并將我們的 drawingList 字段指向該列表。這樣便釋放了舊的繪圖列表以進(jìn)行最后的內(nèi)存回收。然后使 PictureBox 無效,把自己也刪除掉。
  
    PictureBox 畫圖事件處理程序
    我們要注意的最后一項(xiàng)就是在 PictureBox 中畫出圖像。為此,需要處理 PictureBox 生成的 Paint 事件,然后使用通過此事件傳遞的 Graphics 對(duì)象在其上進(jìn)行繪圖。要進(jìn)行繪圖,只需調(diào)用繪圖列表的 DrawList 方法 -- 一個(gè) for each 循環(huán)和多態(tài)將負(fù)責(zé)處理剩下的工作!
  
  
    C#
  private void Drawing_Paint(object sender,
  System.Windows.Forms.PaintEventArgs e) {
  drawingList.DrawList(e.Graphics);
  }
  
  
    Visual Basic
  
  .NET Private Sub Drawing_Paint(ByVal sender As Object, _
  ByVal e As System.Windows.Forms.PaintEventArgs) _
  Handles Drawing.Paint
  drawingList.DrawList(e.Graphics)
  End Sub
  
  
    我們的 Windows 窗體應(yīng)用程序之旅到此結(jié)束 -- 請斟酌這些代碼并進(jìn)行修改,這樣可以學(xué)到更多內(nèi)容!
  
    在 ASP.NET 應(yīng)用程序中使用可繪制對(duì)象
    雖然 ASP.NET Web 應(yīng)用程序和 Windows 窗體應(yīng)用程序之間存在某些不同,但兩者的相似性還是令 Dr. GUI 感到驚奇!
  
    Web 窗體應(yīng)用程序的主要部分
    ASP.NET Web 窗體應(yīng)用程序的主要部分與 Windows 窗體應(yīng)用程序的各部分非常對(duì)應(yīng)。
  
    頁面
    此項(xiàng)對(duì)應(yīng) Windows 窗體應(yīng)用程序中的主窗口。頁面是所有按鈕和其他控件的容器。
  
    按鈕
    同樣,這里有一組按鈕,可用于在窗體上執(zhí)行各種操作。請注意,與以前的應(yīng)用程序不同,我們將頁面文檔的 pageLayout 屬性設(shè)置為 GridLayout 而不是 FlowLayout。這意味著我們可以通過像素位置定位每個(gè)按鈕(以及其他控件)。
  
    請注意,這里也有一些文本框。
  
    還要注意,您不能向 Web 復(fù)制和粘貼 Windows 窗體控件 -- 必須重新創(chuàng)建整個(gè)頁面。
  
    圖像控件
    圖像控件對(duì)應(yīng)于 Windows 窗體應(yīng)用程序中的 PictureBox。但兩者有一些重要的差別:圖像控件不生成 Paint 消息,而是包含加載圖像的 URL。
  
    我們將這個(gè) URL 設(shè)置為第二個(gè) Web 頁,ImageGen.aspx。換句話說,我們有一個(gè) Web 頁,它的全部工作就是從我們的繪圖列表中生成圖像中的位,然后將圖像發(fā)送到客戶端的 Web 瀏覽器。
  
    我們將在下面討論其代碼。
  
    Web 窗體應(yīng)用程序的主要例程
    Windows 窗體應(yīng)用程序和 Web 窗體應(yīng)用程序的代碼之間存在一些重要不同 -- 但也有某些有趣的相似之處。還要注意,可繪制對(duì)象文件中的所有代碼都可以用于三種應(yīng)用程序中的任何一種。
  
    我們的頁面是從 System.Web.UI.Page 派生的,除了以下內(nèi)容外,還包含一組用于所有控件的聲明:
  
    完全相同的內(nèi)容:數(shù)據(jù)聲明和 GetRandomPoint
    此代碼與 Visual Basic .NET Windows 窗體應(yīng)用程序中的代碼幾乎完全相同。如果愿意,可以再看一下上面的這段代碼。它們之間只有一個(gè)不同之處,就是對(duì)字段進(jìn)行了聲明而沒有將其初始化。它們將在 Page_Load 方法中被初始化(如后面所示)。
  
    GetRandomPoint 方法與其他應(yīng)用程序完全相同。能夠重復(fù)使用代碼真的不錯(cuò),不是嗎?
  
  非常相似的內(nèi)容:按鈕單擊事件處理程序
    按鈕單擊事件處理程序與 Windows 窗體應(yīng)用程序相同,只有一個(gè)例外:在 Web 窗體中,由于每次單擊按鈕時(shí)都將重繪圖像,因此無需(也不能)使圖像控件無效。此外,它還將自動(dòng)進(jìn)行重繪 -- 因此唯一要調(diào)用的就是繪圖列表的 Add 方法。
  
    以下是一個(gè)典型的按鈕事件處理程序 -- 用于繪制一個(gè)點(diǎn)。
  
  Private Sub AddPoint_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles AddPoint.Click drawingList.Add(New DPoint(GetRandomPoint(), Color.Blue)) End Sub
  
    其他按鈕事件處理程序都與 Windows 窗體的情況類似,當(dāng)然,有一種例外情況除外,即不調(diào)用任何一種方法使圖像無效。
  
    差別很大的內(nèi)容:頁面加載和卸載處理程序
    頁面加載和卸載處理程序方法是完全不同的。
  
    請記住,我們的頁面對(duì)象是使用每一個(gè) HTTP 請求重新創(chuàng)建的。由于每個(gè)請求都將創(chuàng)建一個(gè)新頁面,因此我們不能象在 Windows 窗體中那樣將數(shù)據(jù)作為成員變量存儲(chǔ),在 Windows 窗體中,主窗口將伴隨應(yīng)用程序而存在。
  
    因此我們必須在某種狀態(tài)變量中存儲(chǔ)請求和頁面之間所需的信息。這里有幾種選擇 -- 下面將就此進(jìn)行討論。