- PR -

TextBox コントロールの入力文字数をバイト数で制限

1
投稿者投稿内容
うむむ
会議室デビュー日: 2004/03/25
投稿数: 12
投稿日時: 2004-03-25 20:23
件名の通り、TextBox コントロールの入力文字数をバイト数で制限する
方法がわからなくて困っております。

TextBox の MaxLength では、バイト数ではなく、あくまでも文字数での制限と
なってしまうのですが、これをバイト数で入力可能な文字数を制限したいと
思っています。

何かよい方法はないでしょうか? よろしくお願いします。
うむむ
会議室デビュー日: 2004/03/25
投稿数: 12
投稿日時: 2004-03-25 20:24
速攻ですみません。環境を書き忘れました。

開発言語は C# です。(Visual Studio .NET 2003 を使用しています。)

それではよろしくお願い致します。
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2004-03-25 20:29
Webアプリですか?Windowsアプリですか?

#追記
.NETはUNICODEなのでバイト単位ではなく文字数で判断しています。
なので、イベントでチェックさせるしかないようです。

「C#.NET バイト 入力 制限 テキストボックス」で検索してみました。
参考になれば幸いです。
http://groups.yahoo.co.jp/group/dotnet-csharp/message/357

_________________

まゆりん@絶賛勉強中<基本情報処理


[ メッセージ編集済み 編集者: まゆりん 編集日時 2004-03-25 21:01 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-03-25 21:51
C#かどうかよりも、TextBoxというのがどっちのTextBoxなのか知りたいですね。2つありますから。
(話からSystem.Windows.Forms.TextBoxだと推察はできますが)

あと、まゆりんさんのリンク先にも書いてありますが、バイト数で制限したいならその半分の値をMaxLengthに設定すれば良いです。UTF-16なら

おそらくShift-JISで何バイトなのかということをおっしゃりたいのだと思いますが、Shift-JISは、今日ではもはやWindows環境で「特に断らなければこれに決まってる」と言えるようなものではありません。
全角半角などという概念も、もはや古臭いものです。
確かに現在でも意識しなければならない時は多いですが、過去の概念だという意識を持ちながら接してみてください。


ある条件で入力された文字を消すサンプルです。
長い文字列をコピペされても使えます。(多分)
コード:
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
  this.textBox1.TextChanged -= new System.EventHandler(this.textBox1_TextChanged);

  while(長さの判定)
  {
    int curPoint=textBox1.SelectionStart-1;
    if(curPoint<0)curPoint=0;
    textBox1.Text=textBox1.Text.Remove(curPoint,1);
    textBox1.SelectionStart=curPoint;
  }

  this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
}



バイト数についてはEncodingクラスの静的メソッドGetEncoding()で
Encoding.GetEncoding("shift-jis")
などとやるとEncodingオブジェクトが取得できますのでGetByteCount()とかでバイト数がとれるんじゃないでしょうか。

それを使った判定を「長さの判定」の部分に入れてください。
うむむ
会議室デビュー日: 2004/03/25
投稿数: 12
投稿日時: 2004-03-25 22:07
お返事ありがとうございます。 TextBox は System.Windows.Forms.TextBox です。
すみません。

で、なぜ、バイト数で制限したいか、をお話したほうがより適切なアドバイスを
頂けそうなので、お付き合いくださると幸せです。

今回行ないたい事は、
TextBox に入力された値を、SQL Server に Insert するのですが、
その SQL Server 側のフィールドが varchar(20) のようになっています。

SQL Server の varchar(20) の 20 は、20文字ではなく、20バイトになるので
それに合わせる為に C# で作成している Windows Forms アプリケーションの
TextBox に入力できる文字数を、文字の数ではなく、バイト数で行ないたかった
為です。TextBox に入力できた値は問題なく SQL Server に登録できるんだよ、
という事にしたいのです。

逆に SQL Server 側の varchar の定義が 20 バイトではなく、20文字
とできるのであれば、それでも構わないのですが。。。

アドバイス頂いたコードはこれから試してみます。ありがとうございます。

他にもアドバイスなどあれば、どんな事でも構わないので、
教えて頂けると助かります。

よろしくお願いします。

なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-03-25 23:44
引用:

mgrd18kさんの書き込み (2004-03-25 22:07) より:

逆に SQL Server 側の varchar の定義が 20 バイトではなく、20文字
とできるのであれば、それでも構わないのですが。。。


nvarcharにする…てまあ、そういう問題じゃないですよね…
1

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