- - PR -
テキストボックスの文字数制限について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-12 15:14
すいません。また質問です。
以前皆様からご指導いただき、テキストボックスの文字数を バイト単位で制限する。という質問が解決したのですが、テキストボックス の制限についてもう一つお教えください。 テキストボックスの枠内のみに文字を記入するという制限は可能でしょうか? 横30バイト分、縦3行分の大きさです。今、総入力文字数80バイトまで、改行キーは 2回までという制限を設けたのですが、 1行目に40バイト分入力し、(WordWrap=Trueなので見た目上次の行に行きます。) 改行キーを2回押すと、入力した1行目の文字が見えなくなってしまいます。 解決するためのうまい方法がありましたらよろしくお願いします。 | ||||||||||||
|
投稿日時: 2004-06-12 15:30
ともさん、こんにちは。
まず、テキストボックスの枠内のみに文字を記入するという制限をどうしても行いたい場合は、 多分APIを使わないと難しいでしょう… ですが、横30バイト分、縦3行表示したいとなると簡単です。 テキストボックスプロパティのMultilineをTrueにすると、テキストボックスの縦サイズを変更することが可能になります。 あと、改行コードの数をKeypressイベントなどで計算し、3回目の改行キー入力時はキャンセルしたらいいと思います。 | ||||||||||||
|
投稿日時: 2004-06-12 16:01
ポポロンさん、早速のレスありがとうございます。
今、ご指摘の通り、MultilineはTrue。Keypressイベントで改行コードの数を3回目の改行キー入力時はキャンセルさせるようにしているのですが、1行目に40バイト書き込むと、折り返して表示するようになっているため、改行の数は0なのに2行目に表示してしまい、そこから2回目の改行の時にはテキストボックスはスクロールしてしまっているため、1行目が見えなくなってしまうのです。 | ||||||||||||
|
投稿日時: 2004-06-12 17:05
諸農です。
試していませんが、EM_LINEFROMCHARで現在の行位置を 判定するなどして対応してみるとか。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2004-06-14 09:46
諸農さん、書込みありがとうございます。
こちらの書込みが遅くなってしまい申し訳有りません。
開発環境が、VB.NETであったため、EM_LINEFROMCHARが使用できなかったのですが、テキストボックスをRichTextBoxにすれば、GetLineFromCharIndex(-1) を使って現在の行位置の判定が出来そうです。ありがとうございました。 ただ、たくさんのTextBoxをRichTextBoxに変えなきゃなりません。。 もしTextBoxでも出来る方法を知っていたら教えてください。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2004-06-14 11:35
諸農です。
VB.NETではWin32が使えないってことでしょうか?
EM_LINEFROMCHARの説明文はこんな風に書いてありますが。。
_________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2004-06-14 13:00
いえ、APIを使わないで出来るなら使わないでやりたいと思っていたもので。。 実は、初めて.netを使っているので(他の言語もほぼ未)、Win32関係の説明を見ると わけがわからなくなっちゃっていたのですよ。。
本当ですね。ただ、TextBoxにやっぱりGetLineFromCharIndexメソッドは ないようです。 これを機にWin32も調べながら使ってみたいと思います。ありがとうございました! | ||||||||||||
|
投稿日時: 2004-06-14 19:26
諸農です。
そういう事だったんですね。 EM_LINEFROMCHARというのはSendMessage()APIの引数に使うんです。 形式はこちらを参照してください。 Win32APIの利用方法はドキュメントの System.Runtime.InteropServices.DllImportAttributeの項目や 過去ログでP/Invoke等を検索してみてください。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ |