C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 2008 C# RichTextに"\0"を含む文字列を設定


(過去ログ 95 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■56728 / inTopicNo.1)  2008 C# RichTextに"\0"を含む文字列を設定
  
□投稿者/ ヨシ (5回)-(2011/01/28(Fri) 11:19:54)

分類:[C#] 

お世話になります。

C# 2008 にてRichTextを使用しています。

下記のようにRichTextに"\0"を含む文字列を表示させようとしています。

・コード
richTextBox1.Text = "ABCDEFGH\0\r\n1234567\n";

・表示イメージ
ABCDEFGH
1234567

\0の箇所はNULLとして、見た目が半角空白で表示されることを望んでおり、
更に、表示された文字列をRichTextからコピーした場合、
空白でなくNULL文字としてコピーでき、貼付け時もNULLとして他へ貼りつけたいと考えています。

しかし、上記のコードを実行しますと、RichText上に\0以降の文字列が表示されません。
\0が終端文字として認識されているようです。
RichText上で\0を上記のように表示、扱うことは出来ますでしょうか。


よろしくお願いいたします。



引用返信 編集キー/
■56730 / inTopicNo.2)  Re[1]: 2008 C# RichTextに"\0"を含む文字列を設定
□投稿者/ Hongliang (752回)-(2011/01/28(Fri) 12:05:24)
無理でしょう。
WM_SETTEXT にせよ EM_SETTEXTEX にせよ null-terminated text ですし、Rtf で \'00 も無効のようですし。
かろうじて EM_STREAMIN の中で \0 を含ませることは可能のようですが、これも Ctrl+C でコピーした時や .NET のプロパティ等から取得した時には \0 で終端されるようです(ついでに文字としては一切表示されない)。
引用返信 編集キー/
■56731 / inTopicNo.3)  Re[2]: 2008 C# RichTextに"\0"を含む文字列を設定
□投稿者/ マサヤ (232回)-(2011/01/28(Fri) 12:12:01)
>下記のようにRichTextに"\0"を含む文字列を表示させようとしています。
>上記のコードを実行しますと、RichText上に\0以降の文字列が表示されません。
richTextBox1.Text = @"ABCDEFGH\0\r\n1234567\n";

引用返信 編集キー/
■56732 / inTopicNo.4)  Re[2]: 2008 C# RichTextに"\0"を含む文字列を設定
□投稿者/ ヨシ (6回)-(2011/01/28(Fri) 13:00:39)
ご回答ありがとうございます。
了解いたしました。
別の対応方法を考慮したいと思います。
ありがとうございました。

> 無理でしょう。
> WM_SETTEXT にせよ EM_SETTEXTEX にせよ null-terminated text ですし、Rtf で \'00 も無効のようですし。
> かろうじて EM_STREAMIN の中で \0 を含ませることは可能のようですが、これも Ctrl+C でコピーした時や .NET のプロパティ等から取得した時には \0 で終端されるようです(ついでに文字としては一切表示されない)。
引用返信 編集キー/
■56733 / inTopicNo.5)  Re[3]: 2008 C# RichTextに"\0"を含む文字列を設定
□投稿者/ ヨシ (7回)-(2011/01/28(Fri) 13:02:51)
ご回答ありがとうございます。

説明がわかるづらく申し訳有りません。
最初の書き込みの表示イメージのようなものを考えています。
頂いたコードを実行すると全てを文字列として表示するので
今回、わたくしの求める結果ではありませんでした。
ありがとうございました。

> >下記のようにRichTextに"\0"を含む文字列を表示させようとしています。
> >上記のコードを実行しますと、RichText上に\0以降の文字列が表示されません。
> richTextBox1.Text = @"ABCDEFGH\0\r\n1234567\n";

解決済み
引用返信 編集キー/
■56739 / inTopicNo.6)  Re[4]: 2008 C# RichTextに"\0"を含む文字列を設定
□投稿者/ 魔界の仮面弁士 (2038回)-(2011/01/28(Fri) 15:40:13)
No56733 (ヨシ さん) に返信
> 最初の書き込みの表示イメージのようなものを考えています。

見た目だけの問題なら、それっぽい別の文字に置き換えて表示するとか。
ttp://www.fileformat.info/info/unicode/char/2400/index.htm

//richTextBox1.Font = new Font("Courier New", 18f);
richTextBox1.Font = new Font("MS UI Gothic", 18f);

string s = "ABCDEFGH\0\r\n1234567\n";

// 改行文字補正
s = s.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n");
// 制御機能用記号への置き換え
s = s.Replace('\0', '\u2400');

richTextBox1.Text = s;


クリップボード対応となると、WM_COPY/WM_CUT/WM_PASTE を捕らえて
NULL 文字と代用文字の置換/復元を行えばそれっぽくなるかも知れませんが、
コピー先のアプリが \0 を処理できなければ、意味が無いでしょうね。
(自作アプリ同士のデータ交換であれば、何とかなるかもしれませんが)

なお、Clipboard クラス経由でのクリップボード操作の場合、
SetText 時に '\0' を含めると、NULL 文字も含めて登録されるようですが、
GetText 時には '\0' 以降が切り取られてしまうようです。API 操作が必要かも。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -