- PR -

テキストボックスの文字数制限について

投稿者投稿内容
とも
会議室デビュー日: 2004/05/22
投稿数: 14
投稿日時: 2004-06-12 15:14
すいません。また質問です。
以前皆様からご指導いただき、テキストボックスの文字数を
バイト単位で制限する。という質問が解決したのですが、テキストボックス
の制限についてもう一つお教えください。

テキストボックスの枠内のみに文字を記入するという制限は可能でしょうか?
横30バイト分、縦3行分の大きさです。今、総入力文字数80バイトまで、改行キーは
2回までという制限を設けたのですが、
1行目に40バイト分入力し、(WordWrap=Trueなので見た目上次の行に行きます。)
改行キーを2回押すと、入力した1行目の文字が見えなくなってしまいます。
解決するためのうまい方法がありましたらよろしくお願いします。




ポポロン
常連さん
会議室デビュー日: 2003/05/30
投稿数: 26
投稿日時: 2004-06-12 15:30
ともさん、こんにちは。
引用:

テキストボックスの枠内のみに文字を記入するという制限は可能でしょうか?
横30バイト分、縦3行分の大きさです。今、総入力文字数80バイトまで、改行キーは
2回までという制限を設けたのですが、
1行目に40バイト分入力し、(WordWrap=Trueなので見た目上次の行に行きます。)
改行キーを2回押すと、入力した1行目の文字が見えなくなってしまいます。
解決するためのうまい方法がありましたらよろしくお願いします。



まず、テキストボックスの枠内のみに文字を記入するという制限をどうしても行いたい場合は、
多分APIを使わないと難しいでしょう…
ですが、横30バイト分、縦3行表示したいとなると簡単です。
テキストボックスプロパティのMultilineをTrueにすると、テキストボックスの縦サイズを変更することが可能になります。
あと、改行コードの数をKeypressイベントなどで計算し、3回目の改行キー入力時はキャンセルしたらいいと思います。
とも
会議室デビュー日: 2004/05/22
投稿数: 14
投稿日時: 2004-06-12 16:01
ポポロンさん、早速のレスありがとうございます。

引用:

テキストボックスプロパティのMultilineをTrueにすると、テキストボックスの縦サイズを変更することが可能になります。
あと、改行コードの数をKeypressイベントなどで計算し、3回目の改行キー入力時はキャンセルしたらいいと思います。



今、ご指摘の通り、MultilineはTrue。Keypressイベントで改行コードの数を3回目の改行キー入力時はキャンセルさせるようにしているのですが、1行目に40バイト書き込むと、折り返して表示するようになっているため、改行の数は0なのに2行目に表示してしまい、そこから2回目の改行の時にはテキストボックスはスクロールしてしまっているため、1行目が見えなくなってしまうのです。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-06-12 17:05
諸農です。

試していませんが、EM_LINEFROMCHARで現在の行位置を
判定するなどして対応してみるとか。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
とも
会議室デビュー日: 2004/05/22
投稿数: 14
投稿日時: 2004-06-14 09:46
諸農さん、書込みありがとうございます。
こちらの書込みが遅くなってしまい申し訳有りません。

引用:

試していませんが、EM_LINEFROMCHARで現在の行位置を
判定するなどして対応してみるとか。



開発環境が、VB.NETであったため、EM_LINEFROMCHARが使用できなかったのですが、テキストボックスをRichTextBoxにすれば、GetLineFromCharIndex(-1)
を使って現在の行位置の判定が出来そうです。ありがとうございました。
ただ、たくさんのTextBoxをRichTextBoxに変えなきゃなりません。。
もしTextBoxでも出来る方法を知っていたら教えてください。
よろしくお願いします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-06-14 11:35
諸農です。

引用:

開発環境が、VB.NETであったため、EM_LINEFROMCHARが使用できなかったのですが、テキ



VB.NETではWin32が使えないってことでしょうか?

引用:

ただ、たくさんのTextBoxをRichTextBoxに変えなきゃなりません。。
もしTextBoxでも出来る方法を知っていたら教えてください。



EM_LINEFROMCHARの説明文はこんな風に書いてありますが。。
コード:
The EM_LINEFROMCHAR message retrieves the index of the line
 that contains the specified character index in a multiline edit control.
A character index is the zero-based index of the character from
 the beginning of the edit control. You can send this message to
 either an edit control or a rich edit control.




_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
とも
会議室デビュー日: 2004/05/22
投稿数: 14
投稿日時: 2004-06-14 13:00
引用:

VB.NETではWin32が使えないってことでしょうか?



いえ、APIを使わないで出来るなら使わないでやりたいと思っていたもので。。
実は、初めて.netを使っているので(他の言語もほぼ未)、Win32関係の説明を見ると
わけがわからなくなっちゃっていたのですよ。。

コード:
 You can send this message to
 either an edit control or a rich edit control.



本当ですね。ただ、TextBoxにやっぱりGetLineFromCharIndexメソッドは
ないようです。
これを機にWin32も調べながら使ってみたいと思います。ありがとうございました!
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-06-14 19:26
諸農です。

引用:

いえ、APIを使わないで出来るなら使わないでやりたいと思っていたもので。。
実は、初めて.netを使っているので(他の言語もほぼ未)、Win32関係の説明を見ると
わけがわからなくなっちゃっていたのですよ。。


そういう事だったんですね。
EM_LINEFROMCHARというのはSendMessage()APIの引数に使うんです。
形式はこちらを参照してください。
Win32APIの利用方法はドキュメントの
System.Runtime.InteropServices.DllImportAttributeの項目や
過去ログでP/Invoke等を検索してみてください。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/

スキルアップ/キャリアアップ(JOB@IT)