可输入的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 Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

SpringBoot项目Web拦截器使用的多种方式

《SpringBoot项目Web拦截器使用的多种方式》在SpringBoot应用中,Web拦截器(Interceptor)是一种用于在请求处理的不同阶段执行自定义逻辑的机制,下面给大家介绍Sprin... 目录一、实现 HandlerInterceptor 接口1、创建HandlerInterceptor实

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框