ASP.NET可交互式位圖窗體設計(8)
發表時間:2024-02-10 來源:明輝站整理相關軟件相關文章人氣:
[摘要]按鈕單擊事件處理程序 接下來就是每個按鈕的按鈕單擊事件處理程序。多數僅僅是向繪圖列表中添加一個新的可繪制對象,然后調用 PictureBox 上的 Invalidate,從而使用更新的繪圖列表進行重繪。典型的按鈕事件處理程序代碼如下所示: C# private vo...
按鈕單擊事件處理程序
接下來就是每個按鈕的按鈕單擊事件處理程序。多數僅僅是向繪圖列表中添加一個新的可繪制對象,然后調用 PictureBox 上的 Invalidate,從而使用更新的繪圖列表進行重繪。典型的按鈕事件處理程序代碼如下所示:
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(將填充色更改為粉紅)按鈕有一些不同 -- 它在列表中獲得一個所有可填充對象的數組,然后將它們的畫筆顏色更改為粉紅。這部分代碼顯示在前面“返回可填充列表”一節的末尾。(此外還必須使 PictureBox 無效。)
最后,Erase All(全部刪除)按鈕簡單地創建了一個新的繪圖列表,并將我們的 drawingList 字段指向該列表。這樣便釋放了舊的繪圖列表以進行最后的內存回收。然后使 PictureBox 無效,把自己也刪除掉。
PictureBox 畫圖事件處理程序
我們要注意的最后一項就是在 PictureBox 中畫出圖像。為此,需要處理 PictureBox 生成的 Paint 事件,然后使用通過此事件傳遞的 Graphics 對象在其上進行繪圖。要進行繪圖,只需調用繪圖列表的 DrawList 方法 -- 一個 for each 循環和多態將負責處理剩下的工作!
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 窗體應用程序之旅到此結束 -- 請斟酌這些代碼并進行修改,這樣可以學到更多內容!
在 ASP.NET 應用程序中使用可繪制對象
雖然 ASP.NET Web 應用程序和 Windows 窗體應用程序之間存在某些不同,但兩者的相似性還是令 Dr. GUI 感到驚奇!
Web 窗體應用程序的主要部分
ASP.NET Web 窗體應用程序的主要部分與 Windows 窗體應用程序的各部分非常對應。
頁面
此項對應 Windows 窗體應用程序中的主窗口。頁面是所有按鈕和其他控件的容器。
按鈕
同樣,這里有一組按鈕,可用于在窗體上執行各種操作。請注意,與以前的應用程序不同,我們將頁面文檔的 pageLayout 屬性設置為 GridLayout 而不是 FlowLayout。這意味著我們可以通過像素位置定位每個按鈕(以及其他控件)。
請注意,這里也有一些文本框。
還要注意,您不能向 Web 復制和粘貼 Windows 窗體控件 -- 必須重新創建整個頁面。
圖像控件
圖像控件對應于 Windows 窗體應用程序中的 PictureBox。但兩者有一些重要的差別:圖像控件不生成 Paint 消息,而是包含加載圖像的 URL。
我們將這個 URL 設置為第二個 Web 頁,ImageGen.aspx。換句話說,我們有一個 Web 頁,它的全部工作就是從我們的繪圖列表中生成圖像中的位,然后將圖像發送到客戶端的 Web 瀏覽器。
我們將在下面討論其代碼。
Web 窗體應用程序的主要例程
Windows 窗體應用程序和 Web 窗體應用程序的代碼之間存在一些重要不同 -- 但也有某些有趣的相似之處。還要注意,可繪制對象文件中的所有代碼都可以用于三種應用程序中的任何一種。
我們的頁面是從 System.Web.UI.Page 派生的,除了以下內容外,還包含一組用于所有控件的聲明:
完全相同的內容:數據聲明和 GetRandomPoint
此代碼與 Visual Basic .NET Windows 窗體應用程序中的代碼幾乎完全相同。如果愿意,可以再看一下上面的這段代碼。它們之間只有一個不同之處,就是對字段進行了聲明而沒有將其初始化。它們將在 Page_Load 方法中被初始化(如后面所示)。
GetRandomPoint 方法與其他應用程序完全相同。能夠重復使用代碼真的不錯,不是嗎?
非常相似的內容:按鈕單擊事件處理程序
按鈕單擊事件處理程序與 Windows 窗體應用程序相同,只有一個例外:在 Web 窗體中,由于每次單擊按鈕時都將重繪圖像,因此無需(也不能)使圖像控件無效。此外,它還將自動進行重繪 -- 因此唯一要調用的就是繪圖列表的 Add 方法。
以下是一個典型的按鈕事件處理程序 -- 用于繪制一個點。
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 窗體的情況類似,當然,有一種例外情況除外,即不調用任何一種方法使圖像無效。
差別很大的內容:頁面加載和卸載處理程序
頁面加載和卸載處理程序方法是完全不同的。
請記住,我們的頁面對象是使用每一個 HTTP 請求重新創建的。由于每個請求都將創建一個新頁面,因此我們不能象在 Windows 窗體中那樣將數據作為成員變量存儲,在 Windows 窗體中,主窗口將伴隨應用程序而存在。
因此我們必須在某種狀態變量中存儲請求和頁面之間所需的信息。這里有幾種選擇 -- 下面將就此進行討論。