可输入的Web下拉列表框控件

2024-01-17 22:32

本文主要是介绍可输入的Web下拉列表框控件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

vs2005提供的web下拉列表框 不支持输入,只能选择,我们可以继承该控件来支持输入功能,实现的原理很简单,就是增加一个textbox控件叠加在下拉列表框上,客户端通过脚本来同步这两个控件的值,先看看服务端代码:

 

using  System;
using  System.Collections.Generic;
using  System.Text;
using  System.Collections;
using  System.Web.UI.WebControls;
using  System.ComponentModel;
using  System.Text.RegularExpressions;
using  System.Drawing;
using  System.Web.UI;

namespace  Weiky.Web.Control
{
    
public class WeikyWebDropDownList : DropDownList
    
{
        
private TextBox _textBox;
        
private Label _label;

        
public WeikyWebDropDownList()
        
{
            _textBox 
= new TextBox();
            _label 
= new Label();
            Caption 
= "标签";
            SetFont(
9"宋体");
            
if (this.Parent != null)
            
{
                
this.Parent.Controls.Add(_textBox);
            }

        }


        
客户端事件

        
public void SetFont(int size, string name)
        
{
            _label.Font.Name 
= name;
            _label.Font.Size 
= size;
        }


        
公共属性

        
protected override void Render(System.Web.UI.HtmlTextWriter output)
        
{
            output.WriteBeginTag(
"Table");
            output.WriteAttribute(
"style"string.Format("width:{0}px;z-index:1;position:absolute;Left:{1}px;Top:{2}px", Width.Value, Left,Top));
            output.WriteAttribute(
"cellspacing""0");
            output.WriteAttribute(
"cellpadding""0");
            output.Write(HtmlTextWriter.TagRightChar);
            output.WriteBeginTag(
"Tr");
            output.WriteAttribute(
"Nowrap""true");
            output.Write(HtmlTextWriter.TagRightChar);
            output.WriteBeginTag(
"Td");
            output.WriteAttribute(
"valign""baseline");
            output.WriteAttribute(
"align""left");
            output.WriteAttribute(
"width", ((1 - TextwidthScale) * 100).ToString() + "%");
            output.Write(HtmlTextWriter.TagRightChar);
            _label.RenderControl(output);
            output.WriteEndTag(
"Td");
            output.WriteBeginTag(
"Td");
            output.WriteAttribute(
"width", (TextwidthScale * 100).ToString() + "%");
            output.Write(HtmlTextWriter.TagRightChar);

            
if (Change != "")
            
{
                Attributes.Add(
"onchange", Editable ? "DropDownList_OnChange('" + ClientID + "',this);" + Change : Change);
            }

            
else if(Editable)
            
{
                Attributes.Add(
"onchange""DropDownList_OnChange('" + ClientID + "',this)");
            }


            
base.Render(output);

            
if (Editable)
            
{
                _textBox.ID 
= ClientID + "_inputControl";
                _textBox.Style.Clear();
                _textBox.Style.Add(
"POSITION""absolute");
                _textBox.Style.Add(
"MARGIN-LEFT""-" + base.Width);
                _textBox.Style.Add(
"width", _textBox.Width.ToString());
                
                
if (Blur != "")
                
{
                    _textBox.Attributes.Add(
"onblur""DropDownList_OnInputBlur('" + ClientID + "',this);" + Blur);
                }

                
else
                
{
                    _textBox.Attributes.Add(
"onblur""DropDownList_OnInputBlur('" + ClientID + "',this)");
                }

                
if (KeyDown != "")
                
{
                    _textBox.Attributes.Add(
"onkeydown", KeyDown);
                }

                
if (KeyUp != "")
                
{
                    _textBox.Attributes.Add(
"onkeyup", KeyUp);
                }

                
if (KeyPress != "")
                
{
                    _textBox.Attributes.Add(
"onkeypress", KeyPress);
                }

                
if (Focus != "")
                
{
                    _textBox.Attributes.Add(
"onfocus", Focus);
                }

                _textBox.RenderControl(output);
            }

            output.WriteEndTag(
"Td");
            output.WriteEndTag(
"Tr");
            output.WriteEndTag(
"Table"); 
        }


        
public void SetTextBoxValue(string value)
        
{
            
if (_textBox != null)
            
{
                _textBox.Text 
= value;
            }

        }


    }

}

 

这个控件还包括前缀标签,说明该控件的名称,组合成一个完整的控件。

客户端通过两个脚本函数同步输入框控件和下拉框控件的值:

 

function  DropDownList_OnChange(id,theControl)
{
    document.all(theControl.id 
+ '_inputControl').value = DropDownList_GetText(theControl);
}


function  DropDownList_OnInputBlur(id,theInput)
{
    
var theControl = GetControlByName('8',id);
    
var isRela = theControl.attributes.getNamedItem('isRela');
    
if(isRela) return;
    
var valueIsValid = false;
    
for(var i=0;i<theControl.children.length;i++)
    
{
        
if(theInput.value == theControl.children[i].value || theControl.children[i].innerText.indexOf(theInput.value) > -1)
        
{
            theControl.children[i].selected 
= true;
            theInput.value 
= theControl.children[i].innerText;
            valueIsValid 
= true;
            
break;
        }

    }

    
if(!valueIsValid)
    
{
        theInput.style.color 
= 'red';
    }

    
else
    
{
        theInput.style.color 
= 'black';
    }

}



这篇关于可输入的Web下拉列表框控件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/617405

相关文章

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧