1

私はWebBrowserを使用しています:

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

選択が取り消し線であるかどうか(コード内)をどのように検出できますか?

4

3 に答える 3

0

3年経ちましたが、検索している人には次のように思います。

使ってみて

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

現在の選択範囲にそのマークアップがある場合はtrue/を返します。false範囲オブジェクトを作成しています-range.select()それを範囲として設定して、クエリの状態によってチェックすることができます。

于 2013-04-16T14:56:36.133 に答える
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 のインターロップ レイヤーで何が利用できるかはよくわかりませんが、これが何かを始めるのに役立つことを願っています。

于 2010-11-16T22:55:43.827 に答える
0

コマンドが成功した場合、execCommand は true を返します。だからあなたは試すことができます:

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

選択範囲が既に StrikeThrough であるかどうかを判断するには、テキスト範囲オブジェクトの parentElement プロパティを見て、それが strike 要素かどうかを確認します。

于 2010-11-17T05:00:21.140 に答える