none
TextBoxの文字制限と取得 RRS feed

  • 質問

  • MS ゴシック10文字3列がちょうど収まる
    Multiline = true
    WordWrap = true
    のTextBoxの入力制限と取得がしたいと考えています。
    入力制限:
    ①半角、全角、改行の入力が可能でTextBoxの寸法を
     超える入力は受け付けない。
    ②文字が挿入された場合にTextBoxの寸法を超える場合は
     末尾が削除される。
    取得:
    TextBoxに表示されている見た目そのままを印刷したいので、
    改行を削除した1行目、2行目、3行目の文字列を取得したい。

    このような仕様で良い方法がありましたらご教授ください。

    2011年3月1日 2:45

回答

  • VBの方へ投稿しなおされたみたいですが、当スレッドは解決済みにしてはどうでしょうか。

    また、少なくとも当スレッドで出た内容を引きついた投稿をするか、当スレッドへのリンクを貼ってください。

    でなければ、回答してくださっている方が出している内容と同様の議論が、また行われるかもしれません。

    これは非常に無意味であり、今後回答して下さる方の時間も無駄になってしまいます。

    • 回答としてマーク Psocmen 2011年3月1日 9:05
    2011年3月1日 5:39

すべての返信

  • 記憶の限りですが、TextBox (Windows の EDIT) は wordwrap の位置の取得が面倒なので、こういう場合には RichTextBox をおすすめします。

    簡易な方法なら、TextChanged イベントで改行位置を取得して、4行以上ある場合に4行目を削る処理を行えばよいのではないかと思います。

    2011年3月1日 3:34
  • 一応確認です。

    >見た目そのままを印刷したいので、改行を削除した1行目、2行目、3行目の文字列を取得したい。

    WordWrapによる文字列の分割位置も、改行とみなすということでしょうか。

    >半角、全角

    10文字は、全角10文字、半角20文字ということでしょうか。

    2011年3月1日 4:28
  • お世話になります。

    WordWrapの分割位置も改行とみなします。

    10文字は全角10文字半角20文字です。

    あと、改行文字は文字数に含めません。

    2011年3月1日 4:50
  • すみません。投稿先を間違えていました。Visual Basicに投稿しなおします。
    2011年3月1日 5:03
  • 他の方の言うとおり、TextChanged イベントハンドラ内で、Text プロパティをいじるのが一番簡単だとは思いますが、これだと、Undo できたりできなくなったりすることになるのでご注意下さい。

    別の方法として、キーボードからの入力 → KeyPress イベントハンドラ内で入力されたキーを検証して、気に入らない操作であれば、e.Handled = true として無視するという方法があります。しかし、これだと貼り付けに対応できないので、TextBox を継承して WndProc をオーバーライドし、貼り付けメッセージが来たときにクリップボードの中を書き換えることで対応できます。

     

    ところで、少し入力が面倒になりますが、TextBox を三つ縦に並べるというのではダメなのでしょうか。

    2011年3月1日 5:24
  • VBの方へ投稿しなおされたみたいですが、当スレッドは解決済みにしてはどうでしょうか。

    また、少なくとも当スレッドで出た内容を引きついた投稿をするか、当スレッドへのリンクを貼ってください。

    でなければ、回答してくださっている方が出している内容と同様の議論が、また行われるかもしれません。

    これは非常に無意味であり、今後回答して下さる方の時間も無駄になってしまいます。

    • 回答としてマーク Psocmen 2011年3月1日 9:05
    2011年3月1日 5:39