【最大10000ポイント】当たる!!質問投稿キャンペーン!

VB2005 でソフト作成中ですが、フォーム内に貼り付けているTextbox にテンキーから数字を入力(5桁以上は入力不可)したいのですが方法が分かりません。どなたか知っている方教えて頂きたいのですが。よろしくお願いします。

A 回答 (3件)

全角で数値を入力していませんか?


たぶん全角数値は文字列扱いされ、Val関数を使用すると0になるはずです。

この回答への補足

できました。Cmi様ありがとうございました。もう一つ質問があります。VB2005のフォーム上にテンキーを作成しテンキーをマウスでクリックするとテキストボックスに数字が入力できるようにもしたのですが、数字が入った後、数字すべてにフォーカスがかかってしまう為、パソコンのテンキーから入力すると現在表示されている数字が消えてしまいます。パソコンのテンキーから入力した時と同じようなフォーカスにしたいのですが、どうしたら良いでしょうか?

補足日時:2008/02/23 11:48
    • good
    • 0

[Num Lock]キーのことを言っているのでしょうか?



Cmiさんが回答されているように、テキストボックスを選択してテンキーから数値を入力するだけでよいと思いますよ。

この回答への補足

HIROs-NET様。回答ありがとうございます。Cmi様に教えてもらった通りにしましたらできました。
Cmi様にも質問していますが、このTextboxに入力した数字をVal関数で10進数に変換すると"0"になってしまいます。どうしてでしょうか?すみませんが教えて下さい。

補足日時:2008/02/22 18:42
    • good
    • 0

Textboxをクリックして、テンキーから数字を入力してください。



また、プロパティのMaxlengthを5にすることで5桁までに制限できます。

この回答への補足

ANo.1様ありがとうございます。早速試したところできました。ただ、このTextboxに入力した数字をVal関数で10進数に変換すると"0"になってしまいます。どうしてでしょうか?すみませんが教えて下さい。

補足日時:2008/02/22 18:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB6で電卓を作っているのですが誰か教えてください

コマンドボタンからの入力は出来ているのですが、キーボードからの入力が出来ません・・・何か良い方法はないでしょうか?
例えば、キーボードで演算子の+を押すとコマンドボタンの+を押したことと同じになればと考えています。

Aベストアンサー

一度下記のようなルーチンを作った事があります。

常に Command1(n) で押された数字は Text1 に表示して FOCUS は Text1 に戻します。
Command2(n) は 四則演算ボタンです

Private Sub Text1_KeyPress(KeyAscii As Integer)
 Select Case KeyAscii
  Case 48 To 57    ' 数字キー
   Call Command1_Click(KeyAscii - 48)
  Case 61      ' = キー
   Call Command2_Click(0)
  Case 43     ' + キー
   Call Command2_Click(1)
  Case 45      ' - キー
   Call Command2_Click(2)
  Case 42     ' * キー
   Call Command2_Click(3)
  Case 47     '/ キー
   Call Command2_Click(4)
  Case 8     ' BackSpace
   'カーソル位置から一文字前の数字を削除する処理
  Case 13     'Enter キー
   Call Command3_Click
 End Select

 KeyAscii = 0

End Sub

カーソルの位置が TextBox に表示されますので数字の挿入処理も可能です

一度下記のようなルーチンを作った事があります。

常に Command1(n) で押された数字は Text1 に表示して FOCUS は Text1 に戻します。
Command2(n) は 四則演算ボタンです

Private Sub Text1_KeyPress(KeyAscii As Integer)
 Select Case KeyAscii
  Case 48 To 57    ' 数字キー
   Call Command1_Click(KeyAscii - 48)
  Case 61      ' = キー
   Call Command2_Click(0)
  Case 43     ' + キー
   Call Command2_Click(1)
  Case 45      ' - キー
 ...続きを読む

QVB 電卓 数字キーを押して ラベルに出力

VB.NET 2005では、
VB.NETにはコントロール配列は存在しないらしいので、それに類似した処理をどう行うかを教えていただきたいのです。
電卓の数字0~9までのボタンをクリックした時
どうすればよいのでしょうか?
作成中のコードです。
Option Explicit On
Public Class frmMain
Dim dData1 As Double, dData2 As Double '数値記憶用
Dim SuuFlag As Boolean '数字キー用
Dim EFlag As Boolean '演算キー用
Dim Enzan As Integer '演算種類記憶用(+:0,-:1,*:2,/:3,4:=)
Const NONE = -1
Const TASU = 0
Const HIKU = 1
Const KAKERU = 2
Const WARU = 3
Const EQU = 4



Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dData1 = 0 '数値記憶用変数の初期化
dData2 = 0
Enzan = NONE '演算種類初期値
SuuFlag = False
EFlag = False

End Sub

Private Sub cmd_Click(ByVal Index As Integer)
'0が1文字だけ、または、演算キーを押した後の時
If txtDisplay.Text = "0" Or SuuFlag = False Then
txtDisplay.Text = "" '0を消す
dData2 = 0
End If
If Index <= 9 Then '0 - 9 数字
txtDisplay.Text = txtDisplay.Text & Trim(Str(Index))
ElseIf Index = 10 Then '.小数点
If txtDisplay.Text = "" Then '最初が小数点
txtDisplay.Text = "0."
ElseIf InStr(txtDisplay.Text, ".") = 0 Then '小数点無し
txtDisplay.Text = txtDisplay.Text & "."
End If
End If
SuuFlag = True
End Sub

End Class


数字のオブジェクト名は
1=cmd1
2=cmd2
3=cmd3
0=cmd0 ~といった感じです。
この先、数字を表示させるには
いったいどうすればよいのでしょうか。
大変申し訳ないのですが、回答お願いいたします。

VB.NET 2005では、
VB.NETにはコントロール配列は存在しないらしいので、それに類似した処理をどう行うかを教えていただきたいのです。
電卓の数字0~9までのボタンをクリックした時
どうすればよいのでしょうか?
作成中のコードです。
Option Explicit On
Public Class frmMain
Dim dData1 As Double, dData2 As Double '数値記憶用
Dim SuuFlag As Boolean '数字キー用
Dim EFlag As Boolean '演算キー用
Dim Enzan As Integer '演算種類記憶用(+:0,-:1,*:2,/:3,4:...続きを読む

Aベストアンサー

こんにちは
テキストボックスに入力した数値を表示させることに絞って回答します。unamana19さんが提案したTagプロパティを使用した場合です。

各数値ボタンのTagプロパティは以下のようにします。
もちろん表示用テキストボックスのTextAlignは右寄せに設定します。
 cmd1のTagに1を設定する
 cmd5のTagに5を設定する ...

コマンドボタンがクリックされた時のイベントプロシージャに
 txtDisplay.Text &= sender.Tag
 txtDisplay.Text = Microsoft.VisualBasic.Val(txtDisplay.Text)

これでどうでしょうか

QTextBoxでEnterキーを押すと、にあるButtonを押したのと同じ効果を出す方法

VB初心者です。
まだ、はじめたばかりなので、上手く質問を説明できませんが、よろしくお願いします。

環境はVisualBasic .net 2003です。

フォームにテキストボックス(TextBox)とボタン(Button)があります。
テキストボックス内でEnterキーを押すと、ボタン(Button)を押したのと同様の効果をだしたいのですが。
VC++6.0だと、SendMessage(WM_COMMAND , .....
のようなやり方でできたはずですが・・・
---------------------------
テキストボックスのコード
Private Sub txtTest_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtTest.KeyDown
If (e.KeyCode = Keys.Enter) Then
'★★★ここでどういうコードを書いてよいかわかりません。
End If
End Sub
----------------------------
ボタンを押したときのイベントハンドラ
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click
    ボタンを押したら、このイベントハンドラを呼び出したい。
    もしくは、間接的に呼び出したい。
-------
どなたか、やり方をご存知の方がいらっしゃいましたら、よろしくお願いします。

VB初心者です。
まだ、はじめたばかりなので、上手く質問を説明できませんが、よろしくお願いします。

環境はVisualBasic .net 2003です。

フォームにテキストボックス(TextBox)とボタン(Button)があります。
テキストボックス内でEnterキーを押すと、ボタン(Button)を押したのと同様の効果をだしたいのですが。
VC++6.0だと、SendMessage(WM_COMMAND , .....
のようなやり方でできたはずですが・・・
---------------------------
テキストボックスのコード
Private Sub txtTest_KeyDown(ByVal ...続きを読む

Aベストアンサー

>SendMessage(WM_COMMAND
とは、多少意味合いが異なりますが。。。

btnTest.PerformClick()
と行うと、btnTestオブジェクトと関連付いたイベントハンドラが起動します。
http://okwave.jp/kotaeru.php3?q=1688744


また、エンターキーの動きに限るのであれば、フォームのAcceptButtonプロパティを利用すると、コーディングが不要です。ついでにエスケープにも動作を持たせたいのであれば、CancelButtonプロパティを利用するといいです。



どうしてもCと全く同様に、イベントを起こすのであれば、Cと同じ手続きでAPIで起こせばよいと思います。
http://okwave.jp/kotaeru.php3?q=199357


Public Class Form1
  Inherits System.Windows.Forms.Form

  Private Declare Auto Function SendMessage Lib "user32" ( _
    ByVal hWnd As Integer, _
    ByVal wMsg As Integer, _
    ByVal wParam As Integer, _
    ByVal lParam As Integer _
  ) As Integer
  Private Declare Auto Function GetDlgCtrlID Lib "user32" ( _
    ByVal hWnd As Integer _
  ) As Integer

  Private Const WM_COMMAND As Integer = &H111
  Private Const BN_CLICKED As Integer = &H0

#Region " Windows フォーム デザイナで生成されたコード "
#End Region

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    btnTest.PerformClick()
    SendMessage( _
      Me.Handle.ToInt32, _
      WM_COMMAND, _
      BN_CLICKED * GetDlgCtrlID(btnTest.Handle.ToInt32) * &H10000, _
      btnTest.Handle.ToInt32 _
    )
  End Sub
End Class

>SendMessage(WM_COMMAND
とは、多少意味合いが異なりますが。。。

btnTest.PerformClick()
と行うと、btnTestオブジェクトと関連付いたイベントハンドラが起動します。
http://okwave.jp/kotaeru.php3?q=1688744


また、エンターキーの動きに限るのであれば、フォームのAcceptButtonプロパティを利用すると、コーディングが不要です。ついでにエスケープにも動作を持たせたいのであれば、CancelButtonプロパティを利用するといいです。



どうしてもCと全く同様に、イベントを起こすのであれば、...続きを読む

Q電卓の作成 VB

こんにちは。課題で、関数電卓作る必要があり、
まずは、基礎となる、Windowsのアクセサリーの電卓を
作らなければいけないのですが、私はVBの基礎が少しできるくらいです。作成期限は2週間です。
これから、死に物狂いでやるしかないと思うのですが、
何をどのように、すればよいかまったく見当がつきません。

この先が不安でしょうがないのですが、
電卓を作成するために、まず必要なものは参考書でしょうか?
入門書はもっているのですが、電卓についてはいっさいふれて
いないため、購入する必要があるのかと思うのですが、
たとえ、購入した本を丸写ししても自分のために
ならないと思うのですが、そうなるのを
防ぐためにはどうすればよいでしょうか?

Aベストアンサー

>電卓を作成するために、まず必要なものは参考書でしょうか?

見本になる関数電卓でしょう。Windows標準の電卓の関数モードは市販の関数電卓の機能が一部省略されていたり表記が違ったりします。まずは、関数電卓を実際に使って必要な機能をリストアップすることが重要です。

>購入した本を丸写ししても自分のためにならないと思うのですが、そうなるのを防ぐためにはどうすればよいでしょうか?

自分で試行錯誤するしかありません。最近はネット上にVBのリファレンスとして使える便利なサイトがたくさんあるので入門書とネットの情報からプログラムを設計しましょう。関数電卓が出来る計算機能は全てVBの関数で用意されているので後はそれを組み合わせるだけです。

http://hanatyan.sakura.ne.jp/

上記のサイトは自分もよく使っていますがVBの簡易リファレンスや色々な使い方のサンプルが載っているので便利です。電卓の作り方は載っていませんが各種関数と使い方は載っているので自分でくみ上げるためには役に立つでしょう。もし、行き詰まったら「VB 電卓」などで検索すれば以外とサンプルは見つかります。

>電卓を作成するために、まず必要なものは参考書でしょうか?

見本になる関数電卓でしょう。Windows標準の電卓の関数モードは市販の関数電卓の機能が一部省略されていたり表記が違ったりします。まずは、関数電卓を実際に使って必要な機能をリストアップすることが重要です。

>購入した本を丸写ししても自分のためにならないと思うのですが、そうなるのを防ぐためにはどうすればよいでしょうか?

自分で試行錯誤するしかありません。最近はネット上にVBのリファレンスとして使える便利なサイトがたくさん...続きを読む

Q文字列の後ろから必要分だけ削除したい。

例1 Dim str As String = "あいうえお1234"

文字列の中の1234だけ削除したい場合は、
str = str.Remove(5,4)
という風に、5文字目の後から4文字削除にすればよいのですが、

例の"あいうえお"の部分の長さが毎回処理する度に異なる場合は、
文字列の頭から何文字目という指定ができないので、”後ろから4文字を削除したい”となります。その場合は、どのようなプロパティを使えばいいのでしょうか。

.NET環境です。

Aベストアンサー

Length(str)で文字数を取得できますので、後ろから4文字目は先頭から何文字目かは計算できると思いますが、どうでしょうか?

QVB初心者。小数点以下の表示でつまづいています(涙

上記内容で四苦八苦しているVB初心者です。

Microsoft Visual Studio / ActiveReportで帳票を作成しています。
DBからの値が、小数点以下ありの場合(例:1.7)の時はそのまま表示し、小数点以下が0の場合(例:1.0)の時、整数部分のみを表示させたいのです。

質問の『値』ですが、今回の値は小数点第一位までです。
#.0 の時 → # と表示。
#.1~9 の時 → そのまま表示。
としたいのです。

稼働環境はWinXP、Win7です。

ちなみにイメージしていただくために・・・
既に別の条件で、
『If H_数量.Text = "0.00" Then
H_数量.Text = ""
H_単価.Text = ""
End If 』
というコードを書いているのですが、この、『H_数量』が問題の値部分です。
H_数量 の値が小数点以下ありの時、0の時、
での条件式となります。

よろしくお願いします。

Aベストアンサー

>H_数量.Text = Format(H_数量.Text, "#,##0")
>は、全行 #,##0 と表示されてしまいました。

こちらは、.NETじゃないので確認はできませんが、
H_数量.Text = Format(Val(H_数量.Text), "#,##0")
のようにValを付けてみてください。
Val関数は、文字列を数値に変換する関数です。

Format関数は、本来は数値を文字列に変換する関数です。
VBは数値が入っている文字列も数値と解釈されることがあるため、Valを使わなくても大丈夫でしたが、
.NETではそれがダメなようです。
ただ、他の言語にしてみればそれが普通なんですけどね。

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

Qバックスペース機能の作り方

VBを使ってプログラミングを作りたいのですが、コマンドボタンを押したら、ラベルに書かれた文字列の右端から一文字消していくような機能をつけたいのですが、どのように作ればよいのか教えてください。たとえば、
「0000」を「000 」
          ↑
          ラベルに書かれた文字列をコマンドボタンをおしてここの文字を消したい。

ちょっとわかりづらいかもしれませんが、よろしくお願いします。

あと、もうひとつあります。2つ以上のフォームで同時に表示させて、なおかつ化さないようにきっちりと配置も決めたいのですが。どの解像度で表示しても同じ位置で表示させたいのですが。

Aベストアンサー

こんにちは。maruru01です。
一つ目の質問は、コマンドボタンのクリックイベントに、

If Text1.Text <> "" Then
  Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
End If

二つ目の質問は意味がよくわかりません。
では。

QVBでの簡易電卓の作成(減算方法)で困っています。

技術評論社のVisual Basic5.0入門編という、
参考書を見ながら、作成したのですが。
どうも、参考書のコードが間違っているみたいでした
良かったら、お知恵をお貸しください。
とりあえず、足し算と引き算処理の作成です。

※使用コントロール
0から9までのコマンドボタンをコントロール配列と、
足し算、引き算、クリアーのコマンドボタンが3つ、
後、数字入力用のテキストボックスが1つです。


コード
****************************************************

Option Explicit
Dim EnterFlag As Boolean 'プラス、マイナスキーが押された直後ならTrueを示すフラグ。
Dim S As Long


Private Sub Command3_Click() 'クリアーボタン
Text1.Text = ""
S = 0
End Sub

Private Sub Plas_Click() '加算処理
S = S + Val(Text1.Text)
Text1.Text = S
EnterFlag = True
End Sub

Private Sub Mainas_Click() '減算処理
S = S - Val(Text1.Text)
Text1.Text = S
EnterFlag = True
End Sub

Private Sub Form_Load()
Text1.Text = ""
S = 0
End Sub

Private Sub key_Click(Index As Integer)
If EnterFlag Then
Text1.Text = ""
EnterFlag = False
End If

If Len(Text1.Text) < 10 Then '10桁以内のとき
Text1.Text = Text1.Text & Index
End If

End Sub

*********************************************************

とこんな感じです。
加算処理は、上手くできますが。
減算処理は、明らかにコードが間違っていると思いました。
初めて(1回目)マイナスボタンを押した時に、変数Sには、必ずマイナス
が入ってしまう状態です。

上手く減算処理出来る方法のアドバイスよろしくお願いします。

技術評論社のVisual Basic5.0入門編という、
参考書を見ながら、作成したのですが。
どうも、参考書のコードが間違っているみたいでした
良かったら、お知恵をお貸しください。
とりあえず、足し算と引き算処理の作成です。

※使用コントロール
0から9までのコマンドボタンをコントロール配列と、
足し算、引き算、クリアーのコマンドボタンが3つ、
後、数字入力用のテキストボックスが1つです。


コード
****************************************************

Option Explicit
Dim Ente...続きを読む

Aベストアンサー

これは、業務用でよく使われる電卓と同じ仕様ですね。
初めてマイナスを押したときに結果がマイナスになるのは正しい動作です。
どういう理由だったか忘れましたが、この方が効率が良い場合があるので
先に数値、その次に演算という入力順序になっているそうです。

それはさておき、普通の電卓と同じ処理をしたいのであれば、
一つ前に押された演算キーを記憶しておいて、新しい演算キーが押されたときに
一つ前の演算を処理する、というような流れになるのではないかと思います。
そうすると、Plas_Click、Mainas_Clickも変更が必要で、演算自体は
一つ前の演算処理、演算子を新しく自分のものに更新する。

Private Sub Plas_Click() '加算処理
 select case <演算子>
  case 1
   S = S + Val(Text1.Text)
   Text1.Text = S
  case 2
   S = S - Val(Text1.Text)
   Text1.Text = S
end select
 EnterFlag = True
 <演算子>=1
End Sub

といった感じでしょうか?
とりあえず、ぱっと思いついただけなので他にも良い方法があるかもしれません。
がんばってください。

これは、業務用でよく使われる電卓と同じ仕様ですね。
初めてマイナスを押したときに結果がマイナスになるのは正しい動作です。
どういう理由だったか忘れましたが、この方が効率が良い場合があるので
先に数値、その次に演算という入力順序になっているそうです。

それはさておき、普通の電卓と同じ処理をしたいのであれば、
一つ前に押された演算キーを記憶しておいて、新しい演算キーが押されたときに
一つ前の演算を処理する、というような流れになるのではないかと思います。
そうすると、Plas_Clic...続きを読む

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり


人気Q&Aランキング