国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

為ASP.NET控件加入快捷菜單(1)

2024-07-10 13:03:55
字體:
來源:轉載
供稿:網友
為asp.net控件加入快捷菜單(1)
          雖然快捷菜單在桌面應用程序中已經是非常通用的元素,但是由于在象asp.net這樣的基于服務器的技術沒有很好的描繪,所以在web應用程序中快捷菜單并不是很通用。要想使用快捷菜單,瀏覽器必須高度支持dhtml和豐富事件模式,例如:microsoft® internet explorer 5.0及更高版本,或者netscape 6.0等。然而,各種瀏覽器的對象模式雖然功能上大至相同,但是成員各名字卻各不相同,這就需要我們自己實現對象和事件的從一種模式到到另一種模式的轉換。

這里,我們創建一個針到internet explorer的對象模式的asp.net快捷菜單。接著,我將經過修改使其功能支持其它瀏覽器。代碼支持asp.net 1.x,也可以在asp.net2.0 beta1下編譯通過 outline of the
contextmenu control 快捷菜單控件概述:
          msdn liabrary 中包含了幾個dhtml快捷菜單的示例。分別提供了對這一功能的不能實現方法。一個快捷菜單就是在頁面中任何位置的一組標記代碼。它包括兩部分內容——界面和腳本(當用戶在頁面右擊時關聯ui),ui提供一個可點擊的元素的列表——菜單項——和各自的內容文本,圖標,命令名(command name),目標url,提示(tooltip),和所有你認為有必要顯示出來的東西。快捷菜單界面是頁面的一部分,并且屬于頁面控件樹中的一員。(太多的快捷菜單將會出現執行的問題:與大多數用戶的常規情況相比,asp.net將發送更多的快捷菜單到瀏覽器)當用戶在頁面的一個元素上右擊時,將引發一段javascript,這段腳本將快捷菜單移動到右擊的位置顯示。

          快捷菜單將保持隱藏屬性,只有當用戶在頁面的一個綁定個快捷菜單的元素上右擊時,快捷菜單才顯示。頁面元素接收腳本事件并彈出一個快捷菜單作為響應。腳本事件信賴于瀏覽器,在internet explorer 5.0和更新版本中是 oncontexmenu事件.在netscape6.0和更新版本中你要使用 onmouseup 事件(在internet explorer 5.0+中你也可能使用onmouseup事件,但要多寫幾行代碼)在接收事件的腳本中,獲取快捷菜單的ui代碼塊并且將它移動到發生點擊的位置。同時設置彈出的panel的 visibilty屬性。當用戶在菜單項上點擊時,頁面回傳并引發服務器端事件。對于服務器而言,點擊一個菜單項和點擊一具常規的按鈕沒什么區別。

當用戶戶想取消已經打開的快捷菜單時怎么辦呢?在windows程序中,按下esc鍵或者在菜單區域外點擊都可以取消已彈出的快捷菜單。所以你必須在web中實現這一功能。請注意,只有快捷菜單處于活動(顯示出來)時,esc鍵才有郊。因為esc還可用于其它元素的其它鍵盤快捷方式。

我還可以讓菜單在用戶鼠標移開菜單時隱藏。可以通過腳本操作 onmouseleave 事件實現。
使用彈出菜單控件
          假定我們已以設計出了這個彈出菜單(我們一會兒再說如何實現這個快捷菜單控件),那么如何使用它在asp.net頁面中添加一個或多個快捷菜單呢?首先,在visual studio® .net的工個欄中拖一個或多個快捷菜單控件到頁面上。然后,為每個菜單添加菜單項,并配置每個菜單項的的工具提示,命令名(command name)和其它所需的內容,例如快捷鍵和幫助主題的鏈接。命令名(command name)用于在響應點擊快捷菜單發生頁面回傳時確定是哪一個菜單項被點擊;對每一個快捷菜單控件實例的菜單項集合它必須是唯一的。

          你必須在html標簽的oncontextmenu事件中加入代碼來彈出快捷菜單,代碼必須信賴一系列的參數,象點擊的x,y坐標,點擊的元素,和要使用的快捷菜單的實例等。注意:如果必要你可以使用這種方式完全代替瀏覽器的快捷菜單。綁定到oncontextmenu事件執行的javascript代碼是在運行時動態生成的。contextmenu控件將暴露一個集合屬性來包含分綁定快捷菜單的控件集合,在contextmenu控件將在運行時給這些要綁定的控件一個 oncontextmenu 屬性。ok!完成!可以測試了。

          慢著,讓我們先來想一下contexmenu控件和頁中任意的顯示快捷菜單的元素的綁定機制,這種機制對設計時的支持怎么樣?理想的情況是:根據基類每一個web控件直接暴露一個 contextmenuid屬性。然后在屬性窗口中選擇這個屬性時,將看到在頁面中的contextmenu控件的列表。當然這些contextmenu控件我們是已經創建了的;contextmenuid屬性在asp.net 1.x中不支持,在將來的asp.net2.0中也不支持。

          在visual studio .net 2003 集成開發環境中,asp.net復合控件可以很好的完成這一工作。可以通過使用類撰寫組合現有控件來創作新控件。復合控件可呈現一個重新使用現有控件功能的用戶界面。復合控件可以從子控件的屬性合成屬性并處理由子控件引發的事件。它還可以公開自定義屬性和事件。

          我不選擇使用復合控件有以下幾個原因:一個是visual studio .net 2003對于web窗體中的控件功能的擴展支持的不好(請參見:extender provider components in asp.net: an iextenderprovider implementation),第二,在visual studio 2005的asp.net設計器中不再支持組件托盤區。web窗體設計器現在僅支持asp.net控件而忽略象復合控件這樣的非可視化的組件。visual studio 2005將不再信賴initializecomponent節,并且不再在代碼文件中自動添任何工具生成(tool-generated)的代碼。asp.net控件也不設計成具有快捷菜單,所以要綁定快捷菜單只能通過快捷菜單控件自身的執行。這里我使用類似asp.net驗證控件和被驗證控件之間關聯的形式。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛坪县| 卢氏县| 洛宁县| 潜江市| 弥渡县| 伊春市| 贵南县| 洛浦县| 留坝县| 册亨县| 全南县| 丰宁| 蓬莱市| 右玉县| 信宜市| 怀来县| 靖安县| 汕尾市| 兴文县| 丹寨县| 通山县| 龙游县| 宝山区| 江阴市| 萨迦县| 屏山县| 东阳市| 合阳县| 广饶县| 兴城市| 大埔区| 长葛市| 库车县| 新疆| 肇州县| 堆龙德庆县| 富阳市| 岢岚县| 万荣县| 客服| 惠水县|