我使用WebBrowser:
IHTMLDocument2 doc = (IHTMLDocument2)webBrowser.Document;
IHTMLTxtRange range = (IHTMLTxtRange)doc.selection.createRange();
...
if(range.execCommand("StrikeThrough", false, null))
{
//Is range strikethroughed or not?
}
我如何检测选择是否通过(在代码中)?
答案 0 :(得分: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层有什么可用,但希望这可以帮助你在某个地方开始。
答案 1 :(得分:0)
如果命令成功,execCommand将返回true。所以你可以试试:
if (range.execCommand("StrikeThrough", false, null))
{
// Strikethrough succeeded
}
要确定选择是否已经是StrikeThrough,您可以查看文本范围对象的parentElement属性,看看它是否是一个strike元素。
答案 2 :(得分:0)
我知道已经有3年了,但我认为对任何人来说都是:
尝试使用
bool struckthrough = doc.queryCommandState("StrikeThrough");
如果当前选择具有该标记,则返回true
/ false
。您正在创建范围对象 - 您可以range.select()
将其设置为要由查询状态检查的范围。