2010-11-15 21 views
1

J'utilise WebBrowser:WebBrowser - vérifier le résultat de execCommand

IHTMLDocument2 doc = (IHTMLDocument2)webBrowser.Document; 
IHTMLTxtRange range = (IHTMLTxtRange)doc.selection.createRange(); 
... 
if(range.execCommand("StrikeThrough", false, null)) 
{ 
    //Is range strikethroughed or not? 
} 

Comment puis-je détecter est biffé la sélection ou non (dans le code)?

Répondre

0

Je sais que cela a été 3 ans, mais je pense à tous ceux qui cherchent:

Essayez d'utiliser

bool struckthrough = doc.queryCommandState("StrikeThrough"); 

Il retourne true/false si la sélection actuelle a ce balisage. Vous créez un objet plage - Vous pouvez définir range.select() comme plage à vérifier par l'état de la requête.

+0

Je ne peux pas vérifier cette solution, je suppose donc, qu'il résout le problème :) – Rover

0

J'ai travaillé sur un éditeur basé sur mshtml en C++ il y a un certain temps, et j'ai fait quelque chose comme le code suivant pour obtenir le style de texte de la sélection en cours.

CComQIPtr<IOleCommandTarget> spCmdTarg(pDispDoc); 

if (pStyle && spCmdTarg) 
{ 
    const ULONG uNumCmnds = 4; 
    OLECMD arrCmnds[uNumCmnds]; 
    arrCmnds[0].cmdID = IDM_BOLD; 
    arrCmnds[1].cmdID = IDM_ITALIC; 
    arrCmnds[2].cmdID = IDM_UNDERLINE; 
    arrCmnds[3].cmdID = IDM_STRIKETHROUGH; 

    if (SUCCEEDED(spCmdTarg->QueryStatus(&CGID_MSHTML, uNumCmnds, arrCmnds, NULL))) 
    { 
     pStyle->SetBold(arrCmnds[0].cmdf & Shdocvw_tlb::OLECMDF_LATCHED); 
     pStyle->SetItalic(arrCmnds[1].cmdf & Shdocvw_tlb::OLECMDF_LATCHED); 
     pStyle->SetUnderline(arrCmnds[2].cmdf & Shdocvw_tlb::OLECMDF_LATCHED); 
     pStyle->SetStrikeThrough(arrCmnds[3].cmdf & Shdocvw_tlb::OLECMDF_LATCHED); 
    } 
} 

Je ne suis pas sûr de savoir comment ce code peut être traduit en C# et ce qui est disponible sur la couche interlop de mshtml, mais nous espérons que cela peut vous aider à démarrer quelque part.

+0

Vous définissez certaines propriétés. Je peux aussi le faire. Je ne peux pas obtenir les propriétés de sélection (GetStrikeThrough disparaît). – Rover

0

La commande execCommand renvoie true si la commande aboutit. Donc, vous pouvez essayer:

if (range.execCommand("StrikeThrough", false, null)) 
{ 
    // Strikethrough succeeded 
} 

Pour déterminer si la sélection est déjà biffées, vous pouvez regarder la propriété parentElement de l'objet plage de texte et voir si elle est un élément de grève.

+0

J'ai besoin de résultat: le texte est barré ou non. – Rover