找出重点控制

时间:2008-12-25 19:33:44

标签: asp.net jquery vb.net reflection

我正在尝试将一个CSS类添加到Control中,一旦呈现页面,它将获得焦点。虽然Page类的SetFocus()方法允许我设置Control,但是没有相应的GetFocus()方法。

根据.Net来源,信息存储在Page类的私有成员_focusedControl中。 FocusedControl属性标记为内部。

有没有办法通过使用Reflection来获取私有成员或内部属性的值?

非常感谢任何帮助。

澄清: 这就是我想添加CssClass服务器端的原因:我正在尝试应用以下内容 JQuery脚本,它改变了焦点元素的背景:

$(document).ready(function() {
  var elements = jQuery("textarea, select, multi-select, :text, :password, :file");

  elements.bind
  (
    'focus',
    function() {
      jQuery(this).addClass('highlightinput');
    }
  );

  elements.bind
  (
    'blur',
    function() {
      jQuery(this).removeClass('highlightinput');
    }
  );
})

只要我没有在aspx.vb中专门设置聚焦控件,这就可以正常工作。如果我设置了一个聚焦控件(我认为是由于计时问题),则在我的处理程序附加到输入字段之前设置焦点,因此输入不会突出显示。所以我的方法是在渲染页面之前将highlightinput类添加到聚焦控件。

4 个答案:

答案 0 :(得分:2)

如果您正在寻找用于突出显示聚焦元素的CSS解决方案,我相信您可以使用':focus'选择器。我没试过,但我相信这是一个有效的选择器。您可以在css文件中使用它:

:focus{ background-color: yellow;}

答案 1 :(得分:1)

焦点控制可能在回发之间发生了变化,这就是为什么我认为你不能轻易找到它。在ViewState中保持每个控件的整个状态可能太昂贵了。

也许你可以使用javascript跟踪哪个控件在客户端的隐藏字段中有焦点,并在服务器上读取它。

答案 2 :(得分:0)

为什么不通过JavaScript完成所有操作?类似的东西:

body.onLoad = function() { document.activeElement.style.color = '#ff0000'}

这可能是错误的,但我认为这是一个好的开始。

答案 3 :(得分:0)

我不知道我是否理解你的问题......

难道你不能只将cssclass添加到服务器端设置焦点的控件上吗?

controlObj).CssClass = "highlightinput"
Page.SetFocus(controlObj)