博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.net 2.0 自定义控件开发[创建自定义浮动菜单FloadMenu控件][示例代码下载]
阅读量:4190 次
发布时间:2019-05-26

本文共 4159 字,大约阅读时间需要 13 分钟。

(一). 概述

        1. 当鼠标悬浮到控件对象上,  会弹出此自定义控件.

        2. 具有通用性, 只要支持 onmouseenter/onmouseleave 等几个事件方法的目标控件都可以使用此控件.

        3. 此控件与前面自定义控件[右击弹出菜单]控件有些类似,  区别是这个控件客户端JavaScript部分有些麻烦.

(二). 运行如图

  

(三). 用法

   1. 将FloatTraceMenu控件Dll添加引用到Web站点工程中

   2. 从工具箱拖动一个FloatTraceMenu控件和另一个支持onmouseenter/onmouseleave 等事件

       的控件到设计器中, 比如:     1 /// 

  2     /// Author: [ ChengKing(ZhengJian) ] 
  3     /// Blog:   Http://blog.csdn.net/ChengKing
  4     /// Date:   2007/4/3
  5     /// 
  6 
    [DefaultProperty(
"
TargetControl
"
)]
  7 
    [ToolboxData(
"
<{0}:FloatTraceMenu runat=server>
"
)]
  8 
    
//
[Designer(typeof(System.ComponentModel.Design.DesignerCollection))]
  9 
    
public
 
class
 FloatTraceMenu : Control, IComponent
 10 
    {
 11 
 12 
        [Bindable(
true
)]
 13 
        [Category(
"
Appearance
"
)]
 14 
        [DefaultValue(
"
[FloatTraceMenu /
"
FloatTraceMenu1/
"
]
"
)]
 15 
        [Localizable(
true
)]
 16 
        
public
 
string
 Text
 17 
        {
 18 
            
get
 19 
            {
 20 
                String s 
=
 (String)ViewState[
"
Text
"
];
 21 
                
return
 ((s 
==
 
null
?
 String.Empty : s);
 22 
            }
 23 
 24 
            
set
 25 
            {
 26 
                ViewState[
"
Text
"
=
 value;
 27 
            }
 28 
        }
 29 
 30 
        [Bindable(
true
)]
 31 
        [Category(
"
Appearance
"
)]
 32 
        [DefaultValue(
""
)]
 33 
        [Description(
"
设置此控件的寄主控件
"
)]
 34 
        [TypeConverter(
typeof
(ControlIDConverter))]  
 35 
        
public
 
string
 TargetControl
 36 
        {
 37 
            
get
 38 
            {
 39 
                String s 
=
 (String)ViewState[
"
TargetControl
"
];
 40 
                
return
 ((s 
==
 
null
?
 String.Empty : s);                                                
 41 
            }
 42 
            
set
 43 
            {
 44 
                ViewState[
"
TargetControl
"
=
 value;
 45 
            }
 46 
        }
 47 
 48 
        
protected
 
override
 
void
 Render(HtmlTextWriter writer)
 49 
        {
 50 
            
if
 (DesignMode)
 51 
            {
 52 
                
this
.Controls.Clear();                
 53 
                LiteralControl lc 
=
 
new
 LiteralControl();
 54 
                lc.Text 
=
 
this
.Text;                
 55 
                
this
.Controls.Add(lc);                
 56 
            }
 57 
            
base
.Render(writer);            
 58 
        }
 59 
 60 
        
protected
 
override
 
void
 CreateChildControls()
 61 
        {            
 62 
            
base
.CreateChildControls();
 63 
        }
 64 
 65 
        
protected
 
override
 
void
 OnPreRender(EventArgs e)
 66 
        {
 67 
 68 
            
if
 (
!
Page.ClientScript.IsClientScriptBlockRegistered(
"
BuildMenu
"
))
 69 
            {
 70 
                Page.ClientScript.RegisterClientScriptBlock(
this
.GetType(), 
"
BuildMenu
"
,
 71 
                    
"
<script type='text/javascript' src='JScript.js'></script>
"
);
 72 
            }
 73 
            
 74 
            
//
GridView增加FloatMenu
 75 
            Control targetControl 
=
 
this
.FindControl(TargetControl);
 76 
 77 
            
//
给GridView头增加FloatMenu
 78 
            
//
Control targetControl = this.FindControl(TargetControl).Controls[0].Controls[0];
 79 
 80 
            StringBuilder strInitScript 
=
 
new
 StringBuilder();
 81 
            
if
 (targetControl 
!=
 
null
)
 82 
            {                
 83 
                strInitScript.Append(
"
<script text/javascript> 
"
);
 84 
                strInitScript.Append(
"
   writeStyle(); makeMenu(); var obj;
"
);
 85 
                strInitScript.Append(
"
   if( document.all&&window.print ) 
"
);
 86 
                strInitScript.Append(
"
   { 
"
);
 87 
                strInitScript.Append(
"
      var objClientId = '
"
 
+
 targetControl.ClientID 
+
 
"
';
"
);
 88 
                strInitScript.Append(
"
      if(objClientId != null) 
"
);
 89 
                strInitScript.Append(
"
      {
"
);
 90 
                strInitScript.Append(
"
         obj = document.getElementById(objClientId);
"
);
 91 
                strInitScript.Append(
"
         document.onclick = forcehideMenu;
"
);
 92 
                
//
strInitScript.Append("         obj.onmouseover = showMenu;");
 93 
                strInitScript.Append(
"
         obj.onmouseenter = showMenu;
"
);
 94 
                
//
strInitScript.Append("         obj.onmouseout = hideMenu;");
 95 
                strInitScript.Append(
"
         obj.onmouseleave = hideMenu;
"
);
 96 
                strInitScript.Append(
"
         obj.onmousemove = moveMenu;
"
);
 97 
                strInitScript.Append(
"
         obj.oncontextmenu = showMenu;
"
);
 98 
                strInitScript.Append(
"
      }
"
);
 99 
                strInitScript.Append(
"
      else {alert('Please Set TargetControl Property!')}
"
);
100 
                strInitScript.Append(
"
   } 
"
);
101 
                strInitScript.Append(
"
</script>
"
);
102 
            }
103 
            
else
104 
            {
105 
                strInitScript.Append(
"
<script text/javascript> 
"
);
106 
                strInitScript.Append(
"
   alert('Please Set TargetControl Property!'); 
"
);
107 
                strInitScript.Append(
"
</script>
"
);
108 
            }
109 
            
if
 (
!
Page.ClientScript.IsStartupScriptRegistered(
"
InitScript
"
))
110 
            {
111 
                Page.ClientScript.RegisterStartupScript(
this
.GetType(), 
"
InitScript
"
,
112 
                    strInitScript.ToString());
113 
            }
114 
           
115 
            
base
.OnPreRender(e);
116 
        }        
117 
    }

 

   2. 测试页面文件default.aspx代码

1 <div>

2    <asp:GridView ID="GridView1" runat="server"  asp:GridView>  
3    <cc1:FloatTraceMenu ID="FloatTraceMenu1" runat="server" TargetControl= "GridView1">

  cc1:FloatTraceMenu>                      

4  div>

(五). 示例代码下载

       

 

       [扩展]可以自定义(手动编程)浮动菜单的款项

      

      

(六). 控件开发其它相关文章:

       

 

 

 

 

 

 

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1552195

你可能感兴趣的文章
软件思考系列之二
查看>>
需求工程???
查看>>
清晰性和可测试性的权衡
查看>>
软件思考系列之一
查看>>
测试观念谈
查看>>
Layers, Levels, and DIP铪铪
查看>>
自底向上设计
查看>>
Hackers and Painters
查看>>
代码自动生成和抽象
查看>>
权衡的艺术
查看>>
软件测试认识中的误区
查看>>
Slashdot对Bjarne Stroustrup的采访
查看>>
递归之美 - Loki库TypeList源码剖析
查看>>
基于hibernate的das实现研究(4)
查看>>
基于hibernate的das实现研究(3)
查看>>
基于hibernate的das实现研究(1)
查看>>
基于hibernate的das实现研究(2)
查看>>
eclipse的jre设置
查看>>
世界是平的------说说SOA,jini,jxta,jbi,OSGi
查看>>
1.1 jBPM BPEL的wsdl扩展实现
查看>>