2010-11-15 76 views
1

結果我用web瀏覽器:web瀏覽器 - 檢查的execCommand

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

如何檢測是選擇走通過與否(代碼)?

回答

0

我知道它已經3年了,但我想任何人搜索:

嘗試使用

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

它返回true/false如果當前選擇有標記。您正在創建一個範圍對象 - 您可以range.select()將其設置爲您的範圍以通過查詢狀態進行檢查。

+0

我不能檢查這個解決方案,所以會假設,它解決了問題:) – Rover 2013-04-18 06:44:27

0

我前一陣子曾在C++基於MSHTML編輯器,我不喜歡的東西下面的代碼來獲取當前選擇的文本樣式。

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); 
    } 
} 

我不太清楚如何這個代碼可以在C#進行翻譯,什麼是可用MSHTML的interlop層上,但希望這可以幫助您開始上的某個地方。

+0

你設置一些屬性。我也可以做到。我無法獲得選擇的屬性(GetStrikeThrough消失)。 – Rover 2010-11-17 11:43:40

0

的execCommand將返回true,如果命令是成功的。所以,你可以嘗試:

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

要確定是否選擇已經刪除線,你可以看看文本範圍對象的parentElement屬性,看看它是否是一個撞擊元件。

+0

我需要的結果是:文本是否透過。 – Rover 2010-11-17 11:41:24