none
Rich TextBoxに複数行入力する場合につて RRS feed

  • 質問

  • Rich TexBoxに複数行入力する場合につて教えて下さい。

     

    「Enter」による改行が出来ないようにする方法を教えて下さい。

     

    ひとつの文書としてずっと入力したいためです。

     

    2008年4月27日 9:26

回答

  • santarou さん、こんにちは

    ダッチです。

     

    RichTextBox.Multiline プロパティを False にすれば単一行で入力できるようになります。

     

    たぶん複数行の入力ができるのに Enter で改行しない方法を探しておられると思うのですが、もしそうだとしたら、どうやって改行するのでしょうか?

     

     santarou さんからの引用
    ひとつの文書としてずっと入力したいためです。

    この部分が理解できませんでした。

    2008年4月27日 11:15
  • HTML で言えば <pre> 要素ではなく <p> 要素のように自動折り返しで表現したいということだと思います。
    改行コードを含まない幅に合わせた自動折り返しというやつですね。

    2008年4月30日 3:18
  • そういうことですか。理解できました。

     

    KeyDown イベントの引数である KeyEventArgs クラスを利用すれば Enter 時に改行をしないようにする事ができます。

     

    KeyEventArgs クラスに Handled プロパティというものが存在します。これに True を設定するとコントロールの既定の処理を省略することができます。既定の処理とは Enter キーで改行したり、カーソルキーでキャレットを移動したりする処理のことです。

     

    今回は改行のみ制御したいとのことですので、Enter キーが入力された時だけ Handled プロパティを True にすればいいと思います。コードにすると次のようになります。

     

    Code Snippet
    Private Sub RichTextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyDown
        If e.KeyCode = Keys.Enter Then
            e.Handled = True
        End If
    End Sub

     

    一つ心配なことがあるのですが、Enter キーで改行を制御しても「貼り付け」操作をした場合に改行が含まれる可能性があります。その場合は大丈夫でしょうか?

    2008年4月30日 12:31
  •  ダッチ さんからの引用

    一つ心配なことがあるのですが、Enter キーで改行を制御しても「貼り付け」操作をした場合に改行が含まれる可能性があります。その場合は大丈夫でしょうか?

     

    大丈夫ではないでしょうね。 WM_PASTE か WM_CHAR を監視するような仕組みが必要ですね。

    2008年5月1日 3:59
  • 仕組みを入れるとなると RichTextBox を継承して WndProc メソッドをオーバーライドする必要がありますね。

     

    回答してくださっている じゃんぬねっと さんのサイトに「数字または一部の文字しか入力できないようにする」というページがあります。これを参考にすれば「貼り付け」操作をした場合に、改行を取り除くことが出来そうです。

     

    上記のページでは許可する文字だけを指定していますが、それを逆にして許可しない文字を指定するようにすればいいと思います。Windows 環境では改行は Cr + Lf の文字の組み合わせになっていますので、ControlChars.Cr と ControlChars.Lf の二種類の文字を取り除くことによって「貼り付け」操作をした場合に、改行を取り除くことができます。
    2008年5月1日 12:22

すべての返信

  • santarou さん、こんにちは

    ダッチです。

     

    RichTextBox.Multiline プロパティを False にすれば単一行で入力できるようになります。

     

    たぶん複数行の入力ができるのに Enter で改行しない方法を探しておられると思うのですが、もしそうだとしたら、どうやって改行するのでしょうか?

     

     santarou さんからの引用
    ひとつの文書としてずっと入力したいためです。

    この部分が理解できませんでした。

    2008年4月27日 11:15
  • HTML で言えば <pre> 要素ではなく <p> 要素のように自動折り返しで表現したいということだと思います。
    改行コードを含まない幅に合わせた自動折り返しというやつですね。

    2008年4月30日 3:18
  • そういうことですか。理解できました。

     

    KeyDown イベントの引数である KeyEventArgs クラスを利用すれば Enter 時に改行をしないようにする事ができます。

     

    KeyEventArgs クラスに Handled プロパティというものが存在します。これに True を設定するとコントロールの既定の処理を省略することができます。既定の処理とは Enter キーで改行したり、カーソルキーでキャレットを移動したりする処理のことです。

     

    今回は改行のみ制御したいとのことですので、Enter キーが入力された時だけ Handled プロパティを True にすればいいと思います。コードにすると次のようになります。

     

    Code Snippet
    Private Sub RichTextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles RichTextBox1.KeyDown
        If e.KeyCode = Keys.Enter Then
            e.Handled = True
        End If
    End Sub

     

    一つ心配なことがあるのですが、Enter キーで改行を制御しても「貼り付け」操作をした場合に改行が含まれる可能性があります。その場合は大丈夫でしょうか?

    2008年4月30日 12:31
  •  ダッチ さんからの引用

    一つ心配なことがあるのですが、Enter キーで改行を制御しても「貼り付け」操作をした場合に改行が含まれる可能性があります。その場合は大丈夫でしょうか?

     

    大丈夫ではないでしょうね。 WM_PASTE か WM_CHAR を監視するような仕組みが必要ですね。

    2008年5月1日 3:59
  • 仕組みを入れるとなると RichTextBox を継承して WndProc メソッドをオーバーライドする必要がありますね。

     

    回答してくださっている じゃんぬねっと さんのサイトに「数字または一部の文字しか入力できないようにする」というページがあります。これを参考にすれば「貼り付け」操作をした場合に、改行を取り除くことが出来そうです。

     

    上記のページでは許可する文字だけを指定していますが、それを逆にして許可しない文字を指定するようにすればいいと思います。Windows 環境では改行は Cr + Lf の文字の組み合わせになっていますので、ControlChars.Cr と ControlChars.Lf の二種類の文字を取り除くことによって「貼り付け」操作をした場合に、改行を取り除くことができます。
    2008年5月1日 12:22
  • ダッチさんが誘導されているのか、私が誘導されちゃっているのか...

    2008年5月3日 16:49
  • 私は じゃんぬねっと さんに上手に誘導されているなぁと感じていました。

     

    ただ、質問者である santarou さんの回答がない状態で先に進んでいいものなのか心配もあります。

    2008年5月4日 5:24
  • みなさんこんにちは、森田です。

     

    ダッチさん、じゃんぬねっとさん、有用な情報をありがとうございました!

     

    santarouさん、フォーラムのご利用ありがとうございます!

    その後いかがでしょうか?

    追加の質問などありましたら、ぜひまた投稿の方をお願いします!

     

    今回、ダッチさん、じゃんぬねっとさんの回答は、大変有用な情報だと思いましたので、

    勝手ながら回答済みチェックをつけさせていただきました。

    santarouさんは、チェックの解除もできますのでご確認ください。

     

    それでは、これからもMSDNフォーラムのご利用をお願いいたします。

     

    2008年5月14日 6:03