Forums: 公開討議 (Thread #31464)

キーワードハイライト表示について (2012-01-28 21:42 by shin #61966)

 テキストエディタエンジンのフリー公開、とてもありがとうございます。
 簡単な操作で文書中の知りたいキーワードのみ閲覧したいので、テキスト中の文字列をドラッグして選択し、MouseUpイベントで、この選択文字列と一致するテキスト中のすべての文字列を、ハイライト表示し、次に、他の文字列をドラッグして選択すれば、前のハイライト表示をクリアして、同様の処理を行うプログラムを作成しようとしました。
 しかし、選択した文字列1カ所のみ青色ハイライト表示され、また、スクロールして戻すとハイライト表示がクリアされてしまいます。よい方法がありましたらご教示くださいませんでしょうか。
---------------------------------------- ファイル選択イベントハンドラ
Sgry.Azuki.Highlighter.KeywordHighlighter hilighter;
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
var path = ((OpenFileDialog)sender).FileName;//テキストファイルのパス
azukiControl1.Document.Text = File.ReadAllText(path, Encoding.GetEncoding("shift_jis"));//テキストをazukiControl1.Document.Textに設定
hilighter = new Sgry.Azuki.Highlighter.KeywordHighlighter();//キーワードハイライターインスタンス生成
}

private void azukiControl1_MouseUp(object sender, MouseEventArgs e)
{
hilighter.ClearKeywords();//2回目以降も同じ処理をするためハイライトキーワードをクリア
var doc = ((Sgry.Azuki.WinForms.AzukiControl)sender).Document;//doc←sender
var word = doc.GetTextInRange(doc.AnchorIndex, doc.CaretIndex);//word←選択範囲文字列
hilighter.AddKeywordSet(new string[] { word }, Sgry.Azuki.CharClass.Keyword);//wordをハイライトキーワードに設定
hilighter.Highlight(doc);//doc中のwordをハイライト表示
}

Reply to #61966×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: キーワードハイライト表示について (2012-02-14 18:18 by あゆ #62223)

shinさん

はじめまして、あゆと申します。

私が作ってるプログラムでも活かせそうな動きですし、
ちょっと面白しろそうなので、試してみました。

私が期待していた動きは、こんな感じで実現できましたけど、
どうでしょうか?

private void azukiControl1_MouseUp(object sender, MouseEventArgs e)
{
hilighter.ClearKeywords();//2回目以降も同じ処理をするためハイライトキーワードをクリア
Sgry.Azuki.WinForms.AzukiControl comp = (Sgry.Azuki.WinForms.AzukiControl)sender;
Sgry.Azuki.Document doc = comp.Document;//doc←sender

if (doc.AnchorIndex == doc.CaretIndex) //クリックは対象外
return;

String word;
if (doc.AnchorIndex < doc.CaretIndex) //文字列の後ろ側から選択されたときの対応
word = doc.GetTextInRange(doc.AnchorIndex, doc.CaretIndex);
else
word = doc.GetTextInRange(doc.CaretIndex, doc.AnchorIndex);

hilighter.AddKeywordSet(new string[] { word }, Sgry.Azuki.CharClass.Keyword);//wordをハイライトキーワードに設定
hilighter.Highlight(doc);//doc中のwordをハイライト表示
comp.Refresh();
}
Reply to #61966

Reply to #62223×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: キーワードハイライト表示について (2012-02-14 19:48 by あゆ #62226)

shinさん

先ほど、サンプルプログラムを書いてみたあゆです。

ちょっと時間を置いて、フト、思ったのですが、
shinさんがやろうとしていることは、ハイライトではなくて、
マーキング機能を使うのが正解なのかなぁ…
なんて思ったり…
Reply to #61966

Reply to #62226×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

RE: キーワードハイライト表示について (2012-03-25 01:34 by shin #62902)

あゆさん、どうもありがとう。Refresh()がいるのですね。
これでバッチリです。あきらめて放っていたのですが、使えることが分かって、うれしいです。市販editorのマクロを使用せずになれたC#で扱えるので、専用のeditorが作れそうです。
Reply to #61966

Reply to #62902×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login