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



原文地址:https://www.cnblogs.com/SummerRain/p/907906.html