tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルTextBoxの桁数制限
記事No1619
投稿日: 2005/04/22(Fri) 10:11
投稿者つかさ
[OSのVer]:WindowsXP    [VBのVer]:VB.NET  

VB6.0の時は、SendMessage関数にて入力桁数の制限を行なっていました。
VB.NETに移行しましたが自由に指定桁数以上に入力可能になります。

プログラムでチェックする事も可能だとは思いますが、あまりスマートでは
ないので、何か良い手段はないでしょうか?

それともSendMessage関数の引数や使い方が間違っているのでしょうか?
宜しくお願いします。

--------------------------------------------------

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (
ByVal hWnd As
IntPtr, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

Public Const EM_LIMITTEXT As Long = &HC5
Public Const EM_SETLIMITTEXT As Long = EM_LIMITTEXT

--------------------------------------------------

DIM DI_MaxLen AS Integer

DI_MaxLen = 10

TextBox1.MaxLength = 0
Call SendMessage(TextBox1.Handle, EM_SETLIMITTEXT, DI_MaxLen, 0&)

[ツリー表示へ]
タイトルRe: TextBoxの桁数制限
記事No1621
投稿日: 2005/04/22(Fri) 10:49
投稿者ソンソン
TextBox1.MaxLength = 4
とかじゃだめなん?

[ツリー表示へ]
タイトルRe^2: TextBoxの桁数制限
記事No1622
投稿日: 2005/04/22(Fri) 11:24
投稿者つかさ
[OSのVer]:Windows    [VBのVer]:VB.NET  
> TextBox1.MaxLength = 4
> とかじゃだめなん?
早速の回答ありがとうございます。
記載漏れでしたが、全角/半角が含まれる場合でも全角は2バイト、半角は1バイト
として入力桁数を制限したいのです。

[ツリー表示へ]
タイトルRe: TextBoxの桁数制限
記事No1623
投稿日: 2005/04/22(Fri) 11:25
投稿者花ちゃん
下記に変更して見て下さい。

直接の原因は ByVal wMsg As Long の部分ですが、他も修正した方がいいかと。
Long 型 → Integer 型 へ

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hWnd As IntPtr, ByVal wMsg As Integer, _
     ByVal wParam As Integer, ByVal lParam As Integer) As Integer

Public Const EM_LIMITTEXT As Int32 = &HC5
Public Const EM_SETLIMITTEXT As Int32 = EM_LIMITTEXT

                             0& の& は外す
Call SendMessage(TextBox5.Handle, EM_SETLIMITTEXT, DI_MaxLen, 0)

[ツリー表示へ]
タイトルRe^2: TextBoxの桁数制限
記事No1624
投稿日: 2005/04/22(Fri) 13:19
投稿者つかさ
[OSのVer]:Windows    [VBのVer]:VB.NET  
> 下記に変更して見て下さい。
>
> 直接の原因は ByVal wMsg As Long の部分ですが、他も修正した方がいいかと。
> Long 型 → Integer 型 へ
>
> Public Declare Function SendMessage Lib "user32" Alias "SendMessageA"
; _
>     (ByVal hWnd As IntPtr, ByVal wMsg As Integer, _
>      ByVal wParam As Integer, ByVal lParam As Integer) As Integer
>
> Public Const EM_LIMITTEXT As Int32 = &HC5
> Public Const EM_SETLIMITTEXT As Int32 = EM_LIMITTEXT
>
>                              0& の& は外す
> Call SendMessage(TextBox5.Handle, EM_SETLIMITTEXT, DI_MaxLen, 0)

早速の回答ありがとうございます。

上記提案通り行なってみましたが、やはり文字としてしかチェックされませんでした。
半角での桁数チェックは正常に行なわれているようですが、全角が含まれるとやはり
文字として扱われる様です("あいう1234"は7桁)。
こまりました・・・。

[ツリー表示へ]
タイトルRe^3: TextBoxの桁数制限
記事No1625
投稿日: 2005/04/22(Fri) 14:06
投稿者魔界の仮面弁士
> 上記提案通り行なってみましたが、やはり文字としてしかチェックされませんでした。
仕様です。Win98等であれば、バイト単位になりますけれども……。

ちなみに EM_LIMITTEXT ではなく、(TextBoxBaseの)MaxLengthプロパティについても、
Win2000等では文字数制限、 Win98ではバイト数制限となります。

Encodingクラスなどで換算する事で対処してみてください。
hhttp://fukkey.dyndns.org/pins/vb/020715/39064.html


> 半角での桁数チェックは正常に行なわれているようですが、全角が含まれるとやはり
> 文字として扱われる様です("あいう1234"は7桁)。
半角だろうと全角だろうと、「正常に」「文字単位で」換算されるかと思いますよ。

なお、こちらの資料も参考に。
hhttp://support.microsoft.com/default.aspx?scid=kb;ja;418099

[ツリー表示へ]
タイトルRe^4: TextBoxの桁数制限
記事No1626
投稿日: 2005/04/22(Fri) 14:30
投稿者つかさ

ご回答ありがとうございます。
やはりChangeイベントで記載いただいた様な処理が必要になりそうですね。
なにか一発で制御できる方法はないかと思っていましたが、記載いただいた
例を参考にさせて頂きます。みなさんどうもありがとうございました。
(今VB6.0からVB.NETへの勉強中なもので色々と質問しますが宜しくお願いします)

[ツリー表示へ]