• 締切済み

VBのRichTextBoxの文字色変更

VBでテキストエディタを作っています。 使い勝手を良くするために、 キーワード(if,for,while,int,char)に色をつける仕様にしました。 しかし実際動かしてみるとすごくチカチカして使い物になりませんでした。 SelectionStart = 5 : SelectionLength = 10 SelectionColor = Color.Red もしくは Select(5,10) SelectionColor = Color.Red 一度選択してから色を変えるのがいけないと思うのですが、 他に一部の色を変える方法はないでしょうか?

みんなの回答

回答No.1

はじめまして、通りすがると申します。 RichTextBoxなのですが、私も使用したことありますのでその時の体験でよければ ご参考にしてください。 私が使用したときの環境は、vb.net2008で使用したのですが動きを見ますと 最終行を追加し色、フォントを設定するときには毎回最初の行から最終行まで編集する イメージでした。この動きによって数十行程度の編集でも表示に非常に時間がかかる 状況にありました。よって高速にアクセスする場合には、RTFコードを直接解析しな いと、高速化は望めないかと思います。msdnライブラリでは以下のサイトになりま す。 http://msdn.microsoft.com/library/default.asp?url=/library/ en-us/dnrtfspec/html/rtfspec.asp rtfの指定は、非常に見ずらく目がチカチカすると思いますが、もし色のみの指定で 、word等に編集を委ねることをしないのであれば、独自にテキスト属性を制御する方 法を考案しそちらの方で検討したほうがよいかもしれません。

atsushi_21
質問者

お礼

はじめまして、回答ありがとうございます。 >色、フォントを設定するときには毎回最初の行から最終行まで編集す >るイメージでした。 まさにそう作りました。 rtf(RichTextFormat)wikiより、 なるほど非常に難しそうですね。 まだ学習を始めて一年で、それっぽいアプリを作ったのも初なので 今回はこの辺で完成としようかと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • RichTextBoxで指定行の色を自動で変更・・。

    変数内に入っているテキストから'が先頭にある行の色のみを灰色に変更して結果をリッチテキストボックスに表示するという事をしたいのですが、うまくいかず困っております・・。 最初は、変数text内に文字列が入っているとして下記コードを書いたのですが、無限ループになってしまいますし、色々サイトを見ていて無理なんだと気づき、次はhttp://itsuko-m.hp.infoseek.co.jp/rtf04.htm を参考にしてみたのですが、やはり良く分かりません・・。 申し訳ありませんが、何か助言頂けると嬉しいです。 VB.NETです。 Do RichTextBox1.SelectionStart = text.IndexOf("'") RichTextBox1.SelectionLength = text.IndexOf(vbCrLf) - text.IndexOf("'") RichTextBox1.SelectionColor = System.Drawing.Color.LightGray Loop While text.IndexOf("'") <= -1

  • VB2008、文字色について教えて下さい

    VB2008を使用しています。 現在、Form内複数あるTextBox内の文字をいくつか選択し、RichTextBox内に"・"で区切って代入するプログラムを作成しています。 その際、RichTextBox内に代入されたTextBoxの文字色を赤色に変える(元は黒色です)コードを下記のように作成しました。 Dim strList() As String strList = RichTextBox1.Text.Split("・"c) For Each strMoji As String In strList Select Case strMoji Case TextBox1.Text TextBox1.ForeColor = Color.Red Case TextBox2.Text TextBox2.ForeColor = Color.Red End Select Next 上記コードは問題ないのですが、RichTextBox内に一度代入された複数のTextBoxの文字から、いくつかを選択して削除した際、選択したTextBoxの文字を元の黒色に戻す方法がわかりません。単純に全てのTextBoxの文字色を黒色に戻すコードを書いてしまうと、同様の操作を他のRichTextBoxに適用した場合、そちらに代入された文字色も黒色に戻ってしまいます。上記のコードを応用すれば出来そうなのですが、良い方法はないでしょうか?上記コード3行目の「In」を「Out」や「Cut」に変更しても構文エラーになってしまいました。

  • VB標準のエディタの色分けを他のアプリでも有効にしたい

    VBやVBAのエディタは、例えば「If」や「End If」を青色に、「'」より右側を緑色に自動的に変換してくれますよね。 これを他のアプリ(実はNotes)でも実現したいのです。 具体的には、情報共有の一環として、部署内でのソースの共有を考えています。VBのエディタで作成したソースをNotes(別にNotesではなくても例えばWord等に)コピー&ペーストしても、VBのエディタで作成したソースというのはリッチテキストではない(と思う)ので色までコピーされません。 しかし、EmEditor等のテキストエディタでできているので、実現する方法はあると思います(もちろんEmEditorもリッチテキストではありませんが)。 短いソースなら、一つ一つ色を指定して変えてもいいのですが、長いソースだと色を変えるのが億劫になります。何かよい方法をご存知の方お教えください。 よろしくお願いいたします。

  • 可変個引数を使った関数で文字の長さを知りたい

    可変個引数を使った引数を使って引数の文字列の長さを知りたいのですがどうすればいいのかわかりません。 DXライブラリを使って文字列の長さを測って文字をどこにおくのかを決めているため文字列の長さがわからないと困ってしまいます。 どのようにすれば可変個引数を使った引数の文字列の長さを測れますか? 大体以下のような感じで作っています。 void kai( int *x , int *y ); //文字列を改行する関数 int JC( unsigned char code ); //文字が1バイト文字 か 2バイト文字か判別する void mozi_show2( int x , int y , int xm , int yb , int color , int char_set , const char *s , ... ){   int i = 0;   int xs = 0 , ys = 0;   int m_color = color;   char One[ 2 ]; //1バイト文字格納用   char Two[ 3 ]; //2バイト文字格納用   const char* p;   va_list args;   va_start( args , s );   p = s;   while( *p != '\0' ){     switch( *p ){       case '%':         p++;         assert( *p != '\0' );         switch( *p ){           case 'd':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%d" , va_arg( args , int ) );             //purintfと使い方はほぼ同じで左から文字を表示したいX座標・文字を表示したいY座標             //文字の色・文字の書式・格納用文字列・表示したいint型の数値をあらわしています             xs += 16;             /*             xs += GetDrawFormatStringWidthToHandle( char_set , "%d" , va_arg( args , int ) );             本来ならこの関数を使って文字列の長さを計る左から             文字列の書式・格納用文字列・長さを測りたいint型文字列             これを使うと別のものを計っているみたいで文字の長さがわからない             文字の長さってどうやって計るの?             */             break;           case 'f':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%f" , va_arg( args , double ) );             break;           case 'c':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%c" , va_arg( args , char ) );             break;           case 's':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%s" , va_arg( args , const char* ) );             break;           case '%':             DrawFormatStringToHandle( x + xs , y + ys * yb , m_color , char_set , "%%" );             xs += GetDrawStringWidthToHandle( "%" , 1 , char_set );             break;         }         p++;         break;       default:         if( JC( *p ) ){           Two[ 0 ] = *p;           Two[ 1 ] = *( p + 1 );           Two[ 2 ] = '\0';           DrawStringToHandle( x + xs , y + ys * yb , Two , m_color , char_set );           xs += GetDrawStringWidthToHandle( Two , 2 , char_set );           p += 2;         }         else{           One[ 0 ] = *p;           One[ 1 ] = '\0';           DrawStringToHandle( x + xs , y + ys * yb , One , m_color , char_set );           xs += GetDrawStringWidthToHandle( One , 1 , char_set );           p++;         }         break;     }     if( xs > xm ){       kai( &xs , &ys );     }   }   va_end( args ); } void zitu_draw( void ){   char *str = "%d個 OK";   int i = 12;   mozi_show2( 100 , 100 , 300 , 15 , red_s , MG_14_0 , str , i );   //左から 文字を表示するX座標・文字を表示するY座標・文字を改行する文字列の長さ   //改行した時のY座標の縦幅・文字色・文字の書式・表示したい文字列・%dに表示したいint型の値 }

  • 文字列とポインタの問題です。

    #include<stdio.h> int f(char *s); int main(void){ char*str="nasida Institute of Technology"; int i; i=f(str); printf("%s:%d\n",str,i); return 0; } int f(char *s) { int j=0; while(*s!='\0'){ if(*s=='t'){ j++; } s++; } return j; } このプログラムの答えが3になるんですが、if文のとこの動作がよく分からないので、よろしくお願いします。

  • VB.NETでフォントのカラーを変える方法

    VB.NETを使っていますが、Label.text=color.redと色指定を記述するパターンをcolor.redの部分に変わってhex値で指定する方法をご存知ないでしょうか。DBから抽出したカラー情報が10進数で書かれています。 まずこれを16進数に直す必要があると思いますが・・・ 宜しくお願いいたします

  • Visual C++のrichtextboxの記述について質問

    Visual C++のプログラミングについて質問があります。 使ってるプロジェクトはVisuaC++ CLRのwindowsフォーム アプリケーションで作ってます。 今、メモ帳などのテキストエディタを作っているのですが、 ある特定の文字だけを部分的に青文字にするにはどのように 書けばよいでしょうか? 最初はコントロールにtextBoxを使って イベント関数をこのようにしてたのですが private: System::Void-------------------- { if(textBox1->Text = "japan") textBox1->ForeColor = Color::Blue; else textBox1->ForeColor = Color::Black; } この場合ですと、"japan"とtextBox内に入力されれば フォントが青色になるのですが例えば "japanef aiueo"と入れると青色にはなりません。 例えば "japanaiueo ef efefefadafffda"と入力されると japanと綴られている所だけフォントを変えたいのですが、 どのように記述すればよいのでしょうか? 自分なりに考えると、TextBoxではなくRichTextBoxのfind関数を 使えばいいのではないかと思うのですが、どのように記述すれば よいのか悩んでいます もしお分かりいただける方がいれば教えてくださると幸いです。

  • VBのリッチテキストについて

    OS98,VB6.0でテキストエディタを作っています。 文章中で指定した文字列を部分的に色をつける機能をつけたいと考え、 いろいろと調べてわかったことは、リッチテキストを使えばいいということでした。しかし、どのようにすれば、部分的に色を変えることができるのかわかりません。 あらかじめワードパッドで部分的に色を変えて保存したrtfファイルではリッチテキストに読み込んだとき、ちゃんと部分的に色が変わった状態で表示させることができました。 また文字の書式を取得しなければならないのかと思って以下のアドレスのプログラムを参考にさせてもらっていたのですが、実行ボタンを押しても何も起こらずいきずまってしまいました。 http://vbvbvb.com/jp/gtips/0451/gSendMessageEmGetcharformat.html どんな情報でもよいので、よろしくお願いします。

  • VB2008で定数に色の設定をしたいです。(初心者)

    VB2008で定数に色の設定をしたいです。(初心者) VB2008初心者です。 定数に色の設定をしたいのですがなかなか上手く設定出来ません。 変数に設定は出来るのですが、 Dim COLOR As System.Drawing.Color = COLOR.Red 定数にした場合エラーになります。 Public Const COLOR As System.Drawing.Color = COLOR.AliceBlue 色々他も試してみたのですが・・初歩的な質問で申し訳ありません。 設定は「System.Drawing.Color」でなくても良いのですが、 どなかたかご教授頂きたく宜しくお願い致します。

  • 改行文字について

    #include<iostream> using namespace std; int main(void) { char c; while (cin.get(c)) if (c == '\n') cout << "[RET]\n"; else cout << c; return(0); } これのif (c == '\n')の改行文字と等しいとは何のことを指すのでしょうか? よろしくお願いします。

印刷位置が左にずれる
このQ&Aのポイント
  • ブラザー製品のQL820NwBで印刷位置が左にずれるトラブルについて相談します。
  • iOSで無線LAN経由で接続している環境で、印刷位置が左にずれる問題が発生しています。
  • 他の同じ機器ではずれがないため、何が原因なのか詳細を調査したいです。
回答を見る