RT
比如:
有5个TextBox控件,分别为tx1,tx2,tx3,tx4,tx5tx1 的 AutoPostBack="True",tx1_TextChanged进行一些后台处理程序,tx1 失去焦点的时候处理后台程序,那么当tx1失去焦点的时候,怎么让程序记住在处理后台程序前当前的焦点在哪个控件上。假设用户操作是点击tx2(或者tx4),使tx1失去焦点,那么怎么获取是tx2(或者tx4)获得焦点的时候tx1失去焦点。

解决方案 »

  1.   

    可以保存在viewstate里面,然后判断
      

  2.   

    我觉得点击其他的控件的时候客户端应该先触发获得焦点事件,通过js记住控件id,后台应该就可以获得吧个人感觉。
      

  3.   

    tx1_TextChanged事件里面用viewstate保存当前触发这个事件的ID就好了
      

  4.   


    主要是这个——当前触发这个事件的ID
    我的用意就是要    当前触发这个事件的ID.Focus()
    问题就是这个“当前触发这个事件的ID”怎么得到。
      

  5.   

    不知道LZ最终是要实现什么
    从上面那句话看来,觉得LZ的设计不是很合理,
    因为当tx1失去焦点的时候,当前焦点不一定在你说的任何一个控件上,到时候你觉得该怎么办。。
    还有LZ像实现一些焦点失去和聚焦的效果,建议用js来做,比较方便
      

  6.   

    首先给这几个控件设置tabindex。
    第二步:为当前的控件加上一个onblur事件(失去焦点事件),记下当前失去焦点控件的id 或者tabindex
    第三步:根据记下的tabindex,得到下一个获得焦点的id
      

  7.   

    原意是,GridView中的TextBox中有设置TextChangeed事件,当TextChangeed事件运行后,整个窗口失去焦点。要在TextChangeed事件中编写代码,使,在ajax的情况下客户没感觉有后台程序的运行。如,在GridView1.Row[0].Cell[1]中的TextBox1的TextChangeed事件触发时是因为用户点击了GridView1.Row[1].Cell[1]中的TextBox1,那么GridView1.Row[1].Cell[1]中的TextBox1控件取得焦点。如果没有程序的话,那么客户点击GridView1.Row[1].Cell[1]中的TextBox1后,后台运行TextBox1.TextChangeed后,那么,窗口没有焦点,那么用户要编辑GridView1.Row[1].Cell[1]中的TextBox1的话,那么还要重新点击。
    或者,下一个可编辑空间取得焦点也可以。
    由于是DataList镶嵌GridView1再镶嵌GridView2,而TextBox在GridView里面,现在是程序处理方法是if (该TextBox所在的GridViewRow不是GridView2的最后一个DataRow)
    {
         该GridViewRow的下一个GridViewRow的TextBox1取得焦点
    }
    else
    {
         if (该TextBox所在的GridView1.GridViewRow不是GridView1的最后一个DataRow)
         {
               该GridView1所在的GridViewRow的下一个GridViewRow的GridView2的GridViewRow[0]的TextBox1取得焦点。
         }
         else
        {
         ………………依次递推想看看有什么比较好的方法没有。
    }