2008-12-25 9 views
1

J'essaye d'ajouter une classe de CSS au contrôle qui obtiendra le foyer, une fois qu'une page est rendue. Alors que la méthode SetFocus() de la classe Page me permet de définir le contrôle, il n'y a pas de méthode GetFocus() correspondante. Selon les sources .Net, les informations sont stockées dans le membre privé _focusedControl de la classe Page. La propriété FocusedControl est marquée comme interne.Figure dehors le contrôle concentré

Existe-t-il un moyen d'obtenir la valeur du membre privé ou de la propriété interne à l'aide de Reflection?

Toute aide serait grandement appréciée.

Précision: Voici pourquoi je veux ajouter un côté serveur CssClass: Je suis en train d'appliquer le script JQuery suivant, qui change l'arrière-plan de l'élément ciblé:

$(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'); 
    } 
); 
}) 

Cette fonctionne très bien tant que je ne définis pas spécifiquement un contrôle ciblé dans mon aspx.vb. Si je mets un contrôle focalisé (je pense en raison d'un problème de synchronisation), le focus est défini avant que mes gestionnaires soient attachés aux champs d'entrée et ainsi, l'entrée n'est pas mise en évidence. Donc, mon approche serait d'ajouter la classe highlightinput au contrôle ciblé avant de rendre la page.

Répondre

1

Le contrôle avec focus peut avoir changé entre les post-backs, c'est pourquoi je ne pense pas que vous pouvez le trouver facilement. Il est probablement trop coûteux de conserver l'état entier de chaque contrôle dans ViewState.

Peut-être que vous pouvez suivre quel contrôle a le focus dans un champ caché sur le client en utilisant javascript, et le lire sur le serveur.

+0

C'est correct. Cependant, je n'ai pas besoin de l'information pour survivre à une publication. J'ai juste besoin de connaître le dernier contrôle, qui a été passé à la méthode SetFocus. – schudel

2

Si vous cherchez une solution css pour mettre en évidence l'élément focalisé, je crois que vous pouvez utiliser le sélecteur ': focus'. Je n'ai pas essayé cela, mais je crois que c'est un sélecteur valide. Vous l'utiliseriez comme ça dans votre fichier css:

:focus{ background-color: yellow;}
+0

Merci Yobi21, cela fonctionne très bien dans Firefox, mais ce n'est pas pris en charge par IE – schudel

0

Pourquoi ne pas tout faire via JavaScript? Quelque chose comme:

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

Ce peut être bogué, mais je pense qu'il est un bon début.

+0

Merci Shawn, j'ai essayé, mais je ne pouvais pas le faire fonctionner. Je préférerais savoir côté serveur quel contrôle recevra le focus. – schudel

0

Je ne sais pas si je comprends bien votre question ...

Ne pourriez-vous ajouter juste un CssClass au contrôle de votre mise au point de réglage pour le Serverside?

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

Le problème est que le Page.SetFocus est appelé par un composant sur lequel je n'ai aucun contrôle. Donc, je voudrais savoir, quel contrôle sera concentré, une fois la page est rendue afin que je puisse définir la CssClass supplémentaire. En outre, je voudrais avoir une approche générique, que je pourrais ajouter à une classe de base – schudel

Questions connexes