|
(一). 概述 1. 當鼠標懸浮到控件對象上, 右擊, 會彈出此自定義控件. 2. 僅當控件支持oncontextmenu事件. (二). 運行如圖
(三). 用法 1. 將PopupTraceMenur控件Dll添加引用到Web站點工程中 2. 從工具箱拖動一個PopupTraceMenu控件和另一個支持oncontextmenu事件的控件到設(shè)計器中, 比如: <GridView id="GridView1" runat="server" /> 3. 設(shè)置PopupTraceMenur的屬性TargetControl=GridView1 4. F5運行即可 (四). 完整代碼 1. 主控件PopupTraceMenu.cs代碼 1 /// <summary>
2 /// Author: ChengKing(ZhengJian) 3 /// </summary> 4 [DefaultProperty("TargetControl")] 5 [ToolboxData("<{0}:PopupTraceMenu runat=server></{0}:PopupTraceMenu>")] 6 //[Designer(typeof(System.ComponentModel.Design.DesignerCollection))] 7 public class PopupTraceMenu : Control, IComponent 8 { 9 10 [Bindable(true)] 11 [Category("Appearance")] 12 [DefaultValue("[PopupTraceMenu \"PopupTraceMenu11\"]")] 13 [Localizable(true)] 14 public string Text 15 { 16 get 17 { 18 String s = (String)ViewState["Text"]; 19 return ((s == null) ? String.Empty : s); 20 } 21 22 set 23 { 24 ViewState["Text"] = value; 25 } 26 } 27 28 [Bindable(true)] 29 [Category("Appearance")] 30 [DefaultValue("")] 31 [Description("設(shè)置此控件的寄主控件")] 32 [TypeConverter(typeof(ControlIDConverter))] 33 public string TargetControl 34 { 35 get 36 { 37 String s = (String)ViewState["TargetControl"]; 38 return ((s == null) ? String.Empty : s); 39 } 40 set 41 { 42 ViewState["TargetControl"] = value; 43 } 44 } 45 46 protected override void Render(HtmlTextWriter writer) 47 { 48 if (DesignMode) 49 { 50 this.Controls.Clear(); 51 LiteralControl lc = new LiteralControl(); 52 lc.Text = this.Text; 53 this.Controls.Add(lc); 54 } 55 base.Render(writer); 56 } 57 58 protected override void CreateChildControls() 59 { 60 base.CreateChildControls(); 61 } 62 63 protected override void OnPreRender(EventArgs e) 64 { 65 66 if (!Page.ClientScript.IsClientScriptBlockRegistered("BuildMenu")) 67 { 68 Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "BuildMenu", 69 "<script type=‘text/javascript‘ src=‘JScript.js‘></script>"); 70 } 71 72 Control targetControl = this.FindControl(TargetControl); 73 74 StringBuilder strInitScript = new StringBuilder(); 75 if (targetControl != null) 76 { 77 strInitScript.Append("<script text/javascript> "); 78 strInitScript.Append(" writeStyle(); makeMenu(); "); 79 strInitScript.Append(" if( document.all&&window.print ) "); 80 strInitScript.Append(" { "); 81 strInitScript.Append(" var objClientId = ‘" + targetControl.ClientID + "‘;"); 82 strInitScript.Append(" if(objClientId != null) "); 83 strInitScript.Append(" {"); 84 strInitScript.Append(" var obj = document.getElementById(objClientId);"); 85 strInitScript.Append(" document.onclick = hideMenu; "); 86 strInitScript.Append(" obj.oncontextmenu = showMenu;"); 87 strInitScript.Append(" }"); 88 strInitScript.Append(" else {alert(‘Please Set TargetControl Property!‘)}"); 89 strInitScript.Append(" } "); 90 strInitScript.Append("</script>"); 91 } 92 else 93 { 94 strInitScript.Append("<script text/javascript> "); 95 strInitScript.Append(" alert(‘Please Set TargetControl Property!‘); "); 96 strInitScript.Append("</script>"); 97 } 98 if (!Page.ClientScript.IsStartupScriptRegistered("InitScript")) 99 { 100 Page.ClientScript.RegisterStartupScript(this.GetType(), "InitScript", 101 strInitScript.ToString()); 102 } 103 104 base.OnPreRender(e); 105 } 106 } 2. 測試頁面文件default.aspx代碼 1 <div> </cc1:PopupTraceMenu> (五). 示例代碼下載 http://www.cnblogs.com/Files/MVP33650/自定義控件開發(fā)--[右鍵菜單].rar
|
|
|