WebBrowser - проверяет результат execCommand - PullRequest
1 голос
/ 15 ноября 2010

Я использую WebBrowser:

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

Как я могу определить, зачеркнут ли выбор или нет (в коде)?

Ответы [ 3 ]

0 голосов
/ 17 ноября 2010

execCommand возвращает true, если команда выполнена успешно.Таким образом, вы можете попробовать:

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

Чтобы определить, является ли выделение уже StrikeThrough, вы можете посмотреть на свойство parentElement объекта текстового диапазона и посмотреть, является ли это элементом удара.

0 голосов
/ 16 апреля 2013

Я знаю, что прошло 3 года, но я думаю, что для любого, кто ищет:

Попробуйте использовать

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

Возвращает true / false, если текущий выбор имеет эторазметки.Вы создаете объект диапазона - вы можете range.select() установить его в качестве диапазона, который будет проверяться состоянием запроса.

0 голосов
/ 17 ноября 2010

Я работал над редактором на основе mshtml в c ++ некоторое время назад и сделал что-то вроде следующего кода, чтобы получить стиль текста текущего выделения.

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, но, надеюсь, это поможет вам начать где-то.

...