|
|
RegisterStartupScript(key, script)
RegisterClientScriptBlock(key, script)
这两个方法的作用都是从前台向后台写脚本,且都接受两个字符串作为输入。第二个参数 script 是要插入到页面中的客户端脚本,包括 <script> 的起始标记和终止标记。第一个参数 key 是插入的客户端脚本的唯一标识符。
这两个方法唯一的不同之处在于从“何处”发送脚本块。RegisterClientScriptBlock() 在 Web 窗体的开始处(紧接着 <form runat="server"> 标识之后)发送脚本块,而 RegisterStartupScript() 在 Web 窗体的结尾处(在 </form> 标识之前)发送脚本块。
RegisterStartupScript() 用于添加要在加载页面后运行的脚本块,通过这种方法添加的脚本块位于 Web 窗体的结尾处,因为必须在脚本运行前定义脚本要修改的 HTML 元素。也就是说,如果您要使用客户端脚本将焦点设置到文本框,必须确保文本框的 HTML 标记位于设置该文本框的焦点的脚本之前。
RegisterClientScriptBlock() 方法用于为响应客户端事件而执行的脚本代码。通过此方法发送的脚本块位于 Web 页面的开始处,因为这种方法不要求将脚本块置于所有 HTML 元素之后,即它一般不使用文档内自定义的控件。
转自http://joybing.cnblogs.com/archive/2005/05/20/159620.html
当调整控件的多个属性时,将先后使用 SuspendLayout 和 ResumeLayout 方法取消多个 Layout 事件。例如,通常先调用 SuspendLayout 方法,然后设置控件的 Size、Location、Anchor 或 Dock 属性,最后调用 ResumeLayout 方法以使更改生效。
private void AddButtons()
{
// Suspend the form layout and add two buttons.
this.SuspendLayout();//控件的布局逻辑被挂起,直到调用 ResumeLayout 方法为止。
Button buttonOK = new Button();
buttonOK.Location = new Point(10, 10);
buttonOK.Size = new Size(75, 25);
buttonOK.Text = "OK";
Button buttonCancel = new Button();
buttonCancel.Location = new Point(90, 10);
buttonCancel.Size = new Size(75, 25);
buttonCancel.Text = "Cancel";
this.Controls.AddRange(new Control[]{buttonOK, buttonCancel});
this.ResumeLayout();
}
大量添加控件时会提高效率
onkeypress="if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;"
-------------------------------
在文本框的 onkeypress事件中加入以上代码,屏蔽键盘事件中,输入值不是数字则返回为false
/// <summary>
/// 计算程序的运行时间
/// </summary>
class StopWatch
{
private int mintStart;
public void start()
{
mintStart = Environment.TickCount;
}
public long elapsed()
{
return Environment.TickCount - mintStart;
}
}
在程序的开始和结尾处分别加上 StopWatch sw = new StopWatch(); sw.start(); 和 sw.elapsed();
sw.elapsed();的返回值就是程序的运行时间。
上面的代码是.NET1.1中使用的 可以参考下面.NET2.0中的用法
无论你是搞技术研究还是搞项目开发,高精度的时间测量在很多场合下都是必需的。xiaotie 在其《dotnet下时间精度测量》提到了一个 QueryPerfCounter,它对目前还在使用 Microsoft .NET Framework v1.1 的开发人员来说的确是一个好帮手。但若你已经用上了 Microsoft .NET Framework v2.0,那么 Stopwatch 将会成为你进行高精度时间测量的不二选择。
1. 测试 Stopwatch
这里,我借用一下 xiaotie 在《dotnet下时间精度测量》的测试代码,并给出对应的运行结果:
// Code #01
static void Test1()
{
Stopwatch sw = new Stopwatch();
sw.Start();
sw.Stop();
Console.WriteLine("Stopwatch 时间精度:{0}ms", sw.ElapsedMilliseconds);
}
// Output:
//
// Stopwatch 时间精度:0ms
static void Test2()
{
Stopwatch sw = new Stopwatch();
int loop = 10000;
int exCount = 0;
for (int i = 0; i < loop; i++)
{
sw.Reset();
sw.Start();
sw.Stop();
if (sw.ElapsedMilliseconds != 0)
{
exCount++;
Console.WriteLine("Stopwatch 时间精读异常:{0}ms", sw.ElapsedMilliseconds);
}
}
Console.WriteLine("共进行{0}次 Stopwatch 的时间精度测试", loop);
Console.WriteLine("其中{0}次 Stopwatch 的时间精度异常", exCount);
Console.WriteLine("时间校准有效性{0}%", 100 - (100.0 * exCount) / loop);
}
// Output:
//
// 共进行10000次 Stopwatch 的时间精度测试
// 其中0次 Stopwatch 的时间精度异常
// 时间校准有效性100%
static void Test3()
{
Stopwatch sw = new Stopwatch();
for (int i = 0; i < 200; i++)
{
sw.Reset();
sw.Start();
sw.Stop();
Console.WriteLine("Stopwatch 时间精度:{0}ms", sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
int j = 0;
for (j = 0; j < i; j++)
{
int l;
}
sw.Stop();
Console.WriteLine("第{0}次循环,耗时{1}ms", i, sw.ElapsedMilliseconds);
Console.WriteLine();
}
}
// Partial output:
//
// Stopwatch 时间精度:0ms
// 第10次循环,耗时0ms
//
// Stopwatch 时间精度:0ms
// 第12次循环,耗时0ms
//
// Stopwatch 时间精度:0ms
// 第16次循环,耗时0ms
从测试结果中可以看到,Stopwatch 绝对能够满足挑剔的你!怎么样?手痒了吗?
2. 应用 Stopwatch
Stopwatch 位于 System.Diagnostics 命名空间中,它的使用方法非常简单,只要你会用一般的计时器,你就会使用它。
2.1 创建实例
你可以通过 new 或者 Stopwatch.StartNew() 来创建一个 Stopwatch 实例:
// Code #02
Stopwatch sw1 = new Stopwatch();
Stopwatch sw2 = Stopwatch.StartNew();
使用 StartNew() 会创建一个 Stopwatch 实例并马上开始计时,即等效于如下代码:
// Code #03
Stopwatch sw2 = new Stopwatch();
sw2.Start();
2.2 测量时间
// Code #04
sw1.Start();
// Do something here
sw2.Stop();
long elaspsedMilliseconds = sw1.ElaspedMilliseconds;
2.3 应用示例
微软官方提供了一系列示范程序用于演示 Visual Studio 2005,其中 Basic Class Library 部分带有一个 Stopwatch 的 Windows Forms 示例程序,你可以到 101 Samples for Visual Studio 2005 下载示例代码。
3. 深入 Stopwatch
Stopwatch 内部也调用了 QueryPerformanceCounter() 和 QueryPerformanceFrequency() 两个函数,与 QueryPerfCounter 不同的是,当 Stopwatch 检测到当前的系统和硬件不支持高精度的计数器时,它将转用我们所熟悉的 DateTime 做法。
Stopwatch 在其静态构造器中调用 QueryPerformanceFrequency(),透过该函数的返回值判断当前的系统和硬件是否支持高精度的计数器,并设置 IsHighResolution 属性的值。Stopwatch 内部用于计算时间间隔的主要方法都会根据 IsHighResolution 的值来选择合适的计算方法。有兴趣的话,你可以使用 Reflector 探究一下 Stopwatch 的内部。