使用自定义控件创建可编辑下拉框

原创 2007年10月13日 16:49:00

 

目的:创建可编辑(可输入)下拉框

步骤一:在VS2005中 新建WEB 控件库 WebControlLibrary1 

步骤二:建立自定义控件类DropDownListExtend

 

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Collections;

namespace WebControlLibrary1
{

    [ToolboxData(
"<{0}:DropDownListExtend runat="server" />")]
    
public class DropDownListExtend : System.Web.UI.WebControls.TextBox
    
{
        
private Hashtable _values;
        
private DropDownList _DropDownList;
       

        
public Hashtable Values
        
{
            
get return _values; }
            
set { _values = value; }
        }




        
public DropDownListExtend()
        
{
            _values 
= new Hashtable();
            _DropDownList 
= new DropDownList();
        }





        
protected override void Render(HtmlTextWriter output)
        
{

            
int iWidth = Convert.ToInt32(base.Width.Value);
            
if (iWidth == 0)
            
{
                iWidth 
= 102;
                
base.Width = Unit.Parse("102px");
            }


            
int sWidth = iWidth + 16;
            
int spanWidth = sWidth - 18;

            output.Write(
"<div style="POSITION:relative">");
            output.Write(
"<span style="MARGIN-LEFT:" + spanWidth.ToString() + "px;OVERFLOW:hidden;WIDTH:18px">");

            _DropDownList.Width 
= Unit.Parse(sWidth.ToString() + "px");
            _DropDownList.Style.Add(
"MARGIN-LEFT""-" + spanWidth.ToString() + "px");
            _DropDownList.ID 
= base.ID + "_Select";
            _DropDownList.Attributes.Add(
"onchange""this.parentNode.nextSibling.value=this.value");
            _DropDownList.Attributes.Add(
"onfocus""" + this.getFocusScript() + "");

            
if (_values.Count > 0)
            
{
                
foreach (string key in _values.Keys)
                
{
                    ListItem item 
= new ListItem();

                    item.Value 
= _values[key].ToString();
                    item.Text 
= key;

                    _DropDownList.Items.Add(item);
                }

            }

            _DropDownList.RenderControl(output);

            output.Write(
"</span>");

            
base.Style.Clear();
            
base.Width = Unit.Parse(iWidth.ToString() + "px");
            
base.Style.Add("left""0px");
            
base.Style.Add("POSITION""absolute");
            
base.Render(output);

            output.Write(
"</div>");
        }


        
private string getFocusScript()
        
{
            
string strScript = " ";
            strScript 
+= "var isExist = -2; ";
            strScript 
+= "var obj = event.srcElement; ";
            strScript 
+= "var str = this.parentNode.nextSibling.value; ";
            strScript 
+= "var ary = obj.options; ";
            strScript 
+= "for(var i=0;i<ary.length;i++){ ";
            strScript 
+= " if(str == ary[i].text){ ";
            strScript 
+= "  isExist = i; ";
            strScript 
+= "  break; ";
            strScript 
+= " } ";
            strScript 
+= "} ";
            strScript 
+= "if(isExist != -2){ ";
            strScript 
+= " obj.selectedIndex = isExist; ";
            strScript 
+= "} ";
            strScript 
+= "else{ ";
            strScript 
+= " obj.selectedIndex = -1; ";
            strScript 
+= "} ";

            
return strScript;
        }

    }

}


 步骤三: 编译工程,生成跟WEB控件库工程名字一样的DLL,如WebControlLibrary1.dll

步骤四: 在需要使用下拉框的工程添加应用(就是在其BIN目录里添加WebControlLibrary1.dll)

步骤五:具体应用:

            页面代码如下:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MasterPage.aspx.cs" Inherits="Module_DataManage_MasterPage" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>无标题页</title>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
    
         
<EditDDLPreFix:DropDownListExtend ID="EditableDDL" runat="server" Text="text" Width="93px"></EditDDLPreFix:DropDownListExtend>     
      
    
</form>
</body>
</html>

 

CS文件如下:

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Module_DataManage_MasterPage : System.Web.UI.Page

{
    
public Hashtable values;
    
protected void Page_Load(object sender, EventArgs e)
    
{
        values 
= new Hashtable();
        values.Add(
"a""a");
        values.Add(
"b""b");
        values.Add(
"c""c");
        
this.EditableDDL.Values=values;
    }


    
public Hashtable Values {

        
get return values; }
        
set { values = value; }
    }


   

}

 

 

android中自定义下拉框

android自带的下拉框好用不?我觉得有时候好用,有时候难有,项目规定这样的效果,自带的控件实现不了,那么只有我们自己来老老实实滴写一个新的了,其实最基本的下拉框就像一些资料填写时,点击的时候出现在...
  • jdsjlzx
  • jdsjlzx
  • 2014年12月07日 19:23
  • 4477

jqGrid之自定义下拉框

目的:用户表中的负责人,做成下拉框模式,下拉框的选项为负责人中的数据。 1.首先js获取负责人数据(数组格式) var g_ary=[]; var g_fpid=n...
  • qq_27194467
  • qq_27194467
  • 2016年11月21日 11:32
  • 4325

jquery 实现自定义下拉菜单实现

body{font-family:"方正兰亭黑简体";margin:0px;padding:0px} .title-name { background: #4f9ae4 none repea...
  • lj102800
  • lj102800
  • 2016年08月03日 14:49
  • 1074

react-native 自定义组件

创建第一个组件 react-native 组件只需要在组件代码后面加上:module.exports = YoukuComponet; “YoukuComponet”是我这里将要创建的一个demo...
  • ypxu87
  • ypxu87
  • 2016年03月02日 11:36
  • 5059

Android Android自定义的下拉列表框控件

一、概述 Android中的有个原生的下拉列表控件Spinner,但是这个控件有时候不符合我们自己的要求, 比如有时候我们需要类似windows 或者web网页中常见的那种下拉列表控件,类...
  • u013068887
  • u013068887
  • 2017年10月20日 13:49
  • 346

ComboBox自定义下拉控件

自定义控件继承自ComboBox, 可以下拉时显示的任意下拉控件。 如图。 *该控件不知是哪位作者弄的。找不见了。(要是有侵权,请联系本人) 控件源码     public delegat...
  • shizhen_2012
  • shizhen_2012
  • 2016年08月31日 15:32
  • 1975

Qt自定义控件的创建与初步使用

本篇博客的目的是简单介绍:创建一个用QLabel类来显示图片的自定义控件的编写。在写自定义控件的过程中遇到了很多的难题,但都慢慢解决了,本人对Qt自定义控件的认识还不深刻,做的不对的地方,还请大家指出...
  • qq_15094525
  • qq_15094525
  • 2017年01月06日 13:40
  • 1181

自定义iOS下拉框

// //  ComBox.h //  play // //  Created by LIBOTAO on 15/11/17. //  Copyright © 2015年 ZWL. All ...
  • zwl492454828
  • zwl492454828
  • 2015年11月18日 11:53
  • 332

android:Spinner(下拉框)控件的使用

1.效果图     2.创建页面文件(main.xml)   Spinner         android:id="@+id/spinner1"                a...
  • lxcao
  • lxcao
  • 2015年02月24日 19:04
  • 1297

自定义组合控件之省市区三级联动选择

自定义组合控件之省市区三级联动选择 需求 一般的购物网站都会有收件地址的填写,为了让用户快速输入自己想要的地址,将全国省市区地址预定好,用户只要动动手指选择就可以。 做这个组合控件之前,...
  • u011394071
  • u011394071
  • 2016年12月02日 21:12
  • 1247
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用自定义控件创建可编辑下拉框
举报原因:
原因补充:

(最多只允许输入30个字)