zoukankan      html  css  js  c++  java
  • ASP.NET自定义控件开发微调控件(NumericUpDown)

      
      闲来无事,学习了下红皮书《ASP.NET组件工具包》中第1章“微调控件”,将其VB.NET代码改写为C#代码,并作了较详细的注释,实现了一个类似WinForm中NumericUpDown的微调控件。

      效果图如右:

      先总结一下开发中的问题和经验:

      1.注意:将控件项目的“属性”-->“通用属性”-->“常规”中的“默认命名空间”设为空,否则总出现错误:“System.ArgumentException: 已存在具有相同键的条目。”

    哪位高手知道原因的话请赐教。???

      2.注意:将.js文件和.bmp文件作为嵌入资源进行编译。方法:在“解决方案资源管理器”中选中文件,右键“属性”,在属性框中“生成操作”项中选择“嵌入的资源”,随后编译该项目即可。

      3.注意:.bmp文件是作为控件的自定义图标显示在工具箱中的(如果你把控件添加到工具箱中的话),该文件要求必须与控件同名(如本程序中的命名为:Xct.WebControls.Spinner.bmp),且带.bmp后缀。

      4.将控件添加到工具箱中的方法:VS2003-IDE菜单“工具”-->“添加/移除工具箱项...”,在“.NET Framework组件”选项卡中点击“浏览”,选择控件对应的dll文件后点击“确定”。在工具箱的“常规”选项卡中就出现新添的控件,如图

      5.优点:该控件在编译时将JS脚本资源嵌入到了程序集dll文件中,使得在布暑应用时不需要再拷贝js文件

      6.问题:该控件的属性“TextAlign - 文本对齐方式”不起作用,不知怎么回事。???

      运行环境:Win2003Server + IIS6 + VS2003 + .NET Framework 1.1 + IE6

      附:《ASP.NET组件工具包》书中的代码可以在http://support.apress.com/books.asp?bID=1861008023&s=0下载.(注:在www.wrox.com找不到其源码下载)
      ===============================================================================

      控件程序代码(Spinner.cs):---- 

      1using System;
      2using System.Web.UI;
      3using System.Web.UI.WebControls;
      4using System.ComponentModel;
      5using System.IO;
      6
      7
      8//指定控件的标记前缀
      9[assembly: TagPrefix("Xct.WebControls","xct")]
     10namespace Xct.WebControls
     11{
     12    枚举类型
     32
     33    /// <summary>
     34    /// ** 微调控件V1.0 ** (夏春涛 2007-09-26) **
     35    /// </summary>

     36    
     37    [ToolboxData("<{0}:Spinner runat=\"server\" width=\"80px\" buttonsize=\"XX-Small\" />")]
     38    public class Spinner : WebControl, INamingContainer
     39    {
     40        脚本资源变量
     46
     47        静态构造函数
     76
     77        属性定义
    220        
    221        重载ChildControlsCreated方法
    332
    333        重载AddAttributesToRender
    341
    342        重载OnPreRender
    350
    351        重载Render
    360
    361        重载OnLoad,向客户端发送JS脚本资源
    385
    386
    387    }

    388}

    389

      Javascript脚本源码(SpinnerLib.js, 这是原书附带的代码):---- 

     1<script language="JavaScript">
     2<!--
     3  function IsChar(code)
     4  {
     5    return /\w/.test(String.fromCharCode(code));
     6  }

     7  function KeyPressed(e, src)
     8  {
     9    var code;
    10
    11    if (e.which == undefined)
    12    {
    13      //IE
    14      code = e.keyCode;
    15    }

    16    else
    17    {
    18      //Mozilla/NS6+
    19      code = e.which;
    20    }

    21
    22    // It's not a character value, leave the function.
    23    if (!IsChar(code)) return true;
    24    
    25    return !isNaN(String.fromCharCode(code));
    26  }

    27  function KeyUp(src)
    28  {
    29    // If we have a valid value, we save it for later,
    30    // else we restore the previously saved value.
    31    if (src.value <= src.max && src.value >= src.min)
    32    {
    33      src.original = src.value;
    34      return true;
    35    }

    36    else
    37    {
    38      // Exceptional case: the user is entering a negative number.
    39      if (src.value == "-"return true;
    40
    41      src.value = src.original;
    42      return false;
    43    }

    44  }

    45  function SpinnerChanged(src)
    46  {
    47    // If we have a valid value, we save it for later,
    48    // else we restore the previously saved value.
    49    if (src.value <= src.max && src.value >= src.min)
    50    {
    51      src.original = src.value;
    52      return true;
    53    }

    54    else
    55    {
    56      src.value = src.original;
    57      return false;
    58    }

    59  }

    60
    61  function Decrement(target)
    62  {
    63    src = document.getElementById(target);
    64    src.value = parseInt(src.value) - parseInt(src.step);
    65    SpinnerChanged(src);
    66    src.focus();
    67  }

    68
    69  function Increment(target)
    70  {
    71    src = document.getElementById(target);
    72    src.value = parseInt(src.value) + parseInt(src.step);
    73    SpinnerChanged(src);
    74    src.focus();
    75  }

    76//-->
    77</script>
    78
    79

      完整程序文件下载:----/Files/bluesky521/Spinner_OK200709271300.rar


      ---- 作者:夏春涛 Email:xchuntao@163.com QQ:23106676



  • 相关阅读:
    python3获取文件夹大小
    git master分支被污染,dev是最新稳定的
    优化经验杂记
    kong
    prometheus
    C# 线程执行带参方法的几种写法(ThreadStart,delegate (),()=>)
    MySql字符集utf8mb4和utf8区别
    程序员必备的一些数学基础知识
    hbase统计表的行数的三种方法
    Flink实时计算pv、uv的几种方法
  • 原文地址:https://www.cnblogs.com/SummerRain/p/907906.html
Copyright © 2011-2022 走看看