可输入的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

相关文章

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

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)