代码改变世界

【小技巧】方便地为页面中的控件设置焦点

2007-07-02 21:01  Valens  阅读(1044)  评论(1编辑  收藏  举报

我们知道,在.net中为某控件设置焦点可以使用Form提供的一个属性:
defaultbutton = "Button1",如果为文本框设置焦点可以使用另外一个属性:defaultfocus = "TextBox1"。

<form id="Form1" 
    defaultbutton
="Button1" 
    defaultfocus
="TextBox1" 
    runat
="server"> 

我们还可以在:
protected void Page_Load(object sender, EventArgs e)
{
         SetFocus(
"TextBox1.ClientID");
}

此时如果查看这个页面生成的html源文件,在源文件底部,可以发现类似下面的一段代码:
<script type="text/javascript">
<!--
..
WebForm_AutoFocus('ctl00_ContentPlaceHolder1_txt_MessageInput');
// -->
</script>

那其实是可以考虑通过这个方法来设置焦点的。
    <script type="text/javascript"><!--   
  
function CustomSetFocus()     
  

    WebForm_AutoFocus('ctl00_ContentPlaceHolder1_txt_MessageInput');
  }

--></script>

这似乎没什么特别的,但给我们一个启发:
假如我们在后置代码中想任意设置焦点怎么处理?似乎可以解决了!
通过调用我们自定义的一个简单的设置焦点的脚本。
下面展示如何调用:

比如在一个Button的Click事件中我们加上:
Page.RegisterStartupScript("MySetFocus""CustomSetFocus()");    
[假如想自定义某个控件,请改造一下CustomSetFocus方法,即添加一个控件ID作为参数]

假如我们使用了UpdatePanel控件,会发现调用会出现问题,这时,我们采取这种写法:
        ScriptManager.RegisterStartupScript(
            
this.Page,
            
this.GetType(),
            
"mysetfocus""customsetfocus();",
            
true);

这样就可以比较方便地设置焦点了。

由于比较简单就不提供源码下载了。