• 締切済み

電卓の数字0~9までのボタンをクリックした時

VB.NETでの質問です。 電卓の数字0~9までのボタンをクリックした時 ラベルに表示されません。 作成したコードは Private Sub cmd_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cmd1.Click, cmd2.Click, cmd3.Click, _ cmd4.Click,cmd5.Click, cmd6.Click, _ cmd.Click, cmd8.Click,cmd9.Click, _ cmd0.Click Dim cmd As Button Dim No As String cmd = CType(sender, Button) 'イベント発生元のボタン情報を取得 Select Case cmd.Name 'ボタン名を参照 Case "cmd1" : No = "1" Case "cmd2" : No = "2" Case "cmd3" : No = "3" Case "cmd4" : No = "4" Case "cmd5" : No = "5" Case "cmd6" : No = "6" Case "cmd7" : No = "7" Case "cmd8" : No = "8" Case "cmd9" : No = "9" Case "cmd0" : No = "0" End Select End Sub エラーは cmd.clickで指定されているメゾットで表示できません。 cmdは宣言されていません。 ということでした。 どうすれば、電卓の数字をクリックしたときに、 ラベルに表示できますか? よろしければ添削お願いいたします。 助言でも結構ですので、申し訳ありませんが よろしくお願いします。

みんなの回答

  • unamana19
  • ベストアンサー率62% (56/89)
回答No.1

VB6では簡単にできていたコントロール配列ですね。 まず、エラーの原因は、cmd_Clickイベントに割りついている Private Sub cmd_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cmd1.Click, cmd2.Click, cmd3.Click, _ cmd4.Click,cmd5.Click, cmd6.Click, _ cmd.Click, cmd8.Click,cmd9.Click, _ cmd0.Click の、"cmd.Click"が"cmd7.Click"なのでしょう。 あと、ボタンより数字を特定するのに、Tagなどを利用すると簡単 になります。各ボタンのTagプロパティに対応する数字をセット しておけば、 Dim btn As Button = CType(sender, Button) Dim No As String = CType(btn.Tag, String) lblTest.Text = No こんな感じになります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VB.NET 電卓作成 コントロール配置 

    VB.NETのVBで電卓を作成しているのですが、 コントロール配置に類似したものがうまくできず 先に進むことができません。 数字の0~9を押したときに、テキストボックスに 表示できるようにするには、どうすればよいのでしょうか? コードは Private Sub cmd_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles cmd1.Click, cmd2.Click, cmd3.Click, _ cmd4.Click,cmd5.Click, cmd6.Click, _ cmd7.Click, cmd8.Click,cmd9.Click, _ cmd0.Click Dim btn As Button = CType(sender, Button) Dim No As String = CType(btn.Tag, String) txtDisplay.Text = No Select Case cmd.Name 'ボタン名を参照 Case "cmd1" : No = "1" Case "cmd2" : No = "2" Case "cmd3" : No = "3" Case "cmd4" : No = "4" Case "cmd5" : No = "5" Case "cmd6" : No = "6" Case "cmd7" : No = "7" Case "cmd8" : No = "8" Case "cmd9" : No = "9" Case "cmd0" : No = "0" End Select End Sub です。 Handles cmd1.Click, cmd2.Click, cmd3.Click, _ cmd4.Click,cmd5.Click, cmd6.Click, _ cmd7.Click, cmd8.Click,cmd9.Click, _ cmd0.Click のclickの部分が、青線のエラーがでます。 〔内容は、指定されているシグネチャが違います。〕 また、Select Case cmd.Name 'ボタン名を参照 のcmdがcmdは宣言されていません。とのエラーがでました。 長々となっていまい大変失礼しました。 どのようにすれば、数字キーをクリックしたときに テキストに表示されるようになるのでしょうか?

  • 電卓作成(緊急です!!)

    電卓作成(緊急です!!) 以下のようなコードで電卓を作りました。これで完成かな?と思いきや1+2=7-8=29、1+2+3=5 となり不具合が出てしまいました。どう直せばこれを解決できますか?(=の所がおかしい?) Public Class Form電卓 Inherits System.Windows.Forms.Form Dim R1 As Integer 'レジスタの値 Dim R2 As Integer 'レジスタの保存 Dim Op As Integer '演算子 Dim CL As Integer '数字列の制御 windows フォームデザイナーで生成されたコード Private Sub Button終了_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button終了.Click End End Sub Private Sub 数字キー(ByVal k As Integer) If CL Then R1 = 0 CL = False End If R1 = R1 * 10 + k TextReg.Text = R1 End Sub Private Sub 演算キー(ByVal o As Integer) Op = o R2 = R1 CL = True End Sub Private Sub 計算() Select Case Op Case 1 R1 = R2 + R1 Case 2 R1 = R2 - R1 Case 3 R1 = R2 * R1 Case 4 R1 = R2 \ R1 End Select End Sub Private Sub KeyN0_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyN0.Click 数字キー(0) End Sub ’(引数が1~9と置き換わったコードがこの下に続きますが長くなるので今は省略します) Private Sub KeyOA_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyOA.Click 演算キー(1) End Sub ’(引数が2~4と置き換わったコードがこの下に続きますが長くなるので今は省略します) Private Sub KeyEg_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyEg.Click 計算() TextReg.Text = R1 End Sub Private Sub KeyCl_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KeyCl.Click R1 = 0 R2 = 0 Op = 0 CL = True TextReg.Text = "" End Sub Private Sub Form電卓_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load R1 = 0 R2 = 0 Op = 0 CL = True TextReg.Text = "" End Sub End Class

  • ボタンを押した時のコーディング方法について

    ネットや書籍で調べてみたものの要領を得なかったため質問させていただきます。 開発環境:visual web developer 画面デザイン:テキストボックス(ID:TextBox1)、ボタン(ID:DeleteButton)、ボタン(ID:UpdateButton)、ボタン(ID:CloseButton) 従来の記述方法:ボタン一つずつの単位で押された時の処理を書いていました。 Protected Sub DeleteButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles DeleteButton.Click TextBox1.Text = "削除しました" End Sub Protected Sub UpdateButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles UpdateButton.Click TextBox1.Text = "更新しました" End Sub Protected Sub CloseButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles CloseButton.Click TextBox1.Text = "終了しました" End Sub 今回やりたいこと: 押されたボタンのIDを何らかの方法で取得し、変数"ButtonID"に代入→Select Caseを使い、変数の値に応じて処理の振り分けを行う。 Sub Button_Click() Dim ButtonID As String = ???? Select Case ButtonID Case "DeleteButton" TextBox1.Text = "削除しました" Case "UpdateButton" TextBox1.Text = "更新しました" Case "ClseButton" TextBox1.Text = "終了しました" Case Else '処理は行わない End Select End Sub わからない点:押されたボタンのIDを取得する方法です。      もしわかる方がいましたらご助言いただけると助かります。 よろしくお願い致します。

  • ボタンをクリックしても空白をリストに追加しないようにしたい

    初心者ですのでよろしくお願いいたします。 以下のようなコードでボタンを押すとテキストボックスに入力してあるテキストをリストに登録したいのですが、空白の場合は追加したくありません。どのように書けばいいでしょうか? よろしくお願いいたします。 (ちなみにLabel3にはリストに登録された数が出ます) Public Class Form1 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add(TextBox1.Text) TextBox1.Clear() Label3.Text = ListBox1.Items.Count End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Remove(ListBox1.SelectedItem) Label3.Text = ListBox1.Items.Count End Sub End Class

  • VB電卓作成について

    今、Visual Studio NETを用いて電卓を作ろうとしています。 いろいろ調べてやっているのですが、うまくいきません。 1+2はできるのですが、1+2+3が5になってしまいます。 どうすればいいのか、どなたか教えていただけませんか? 今のコードをキーの設定以外を記載しておきます。 お願いします。 ================================================ Private Sub 数字キー(ByVal n As Integer) If CL Then R1 = 0 CL = False End If R1 = R1 * 10 + n Textreg.Text = R1 End Sub Private Sub 演算キー(ByVal o As Integer) Op = o R2 = R1 CL = True End Sub Private Sub 計算() Select Case Op Case 1 R1 = R2 + R1 Case 2 R1 = R2 - R1 Case 3 R1 = R2 * R1 Case 4 R1 = R2 \ R1 End Select Textreg.Text = R1 End Sub Private Sub keyEQ_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles keyEQ.Click 計算() End Sub Private Sub keyCL_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles keyCL.Click Textreg.Text = "0" R1 = 0 R2 = 0 Op = 0 CL = True End Sub Private Sub Form電卓_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load Textreg.Text = 0 R1 = 0 R2 = 0 Op = 0 CL = True End Sub End Class

  • ボタンの検知

    すみません。初心者です。教えてください。 フォームにボタン1個、テキストボックス1個のプログラムです。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim chr As String Dim chr2 As String chr = "■" chr2 = Label1.Text Label1.Text = chr2 & chr End Sub このプログラムで ・ボタンを「押すたび」に"■"→"■■"→"■■■"と増えていきます。 これを ・ボタンを「押しままにすると」"■"→"■■"→"■■■"と増えていくようにするにはどうしたらよいでしょうか? 例えばタイマー使って100ms毎とかで"■"の数を増やしたいと思っていますが、「ボタンを押している」ということをどのように拾ったらいいか考えてもわかりません。 どなたかすみませんが教えてください。

  • Page_Load時にボタンクリックイベントを実行するには?

    ASP.NETでPage_Load時にボタンクリックイベントを実行するにはどのようにすればいいのでしょうか? 具体的には、HTTPクエリ文字列のresultが"1"の場合はbutton1_Clickイベントを実行したいのですが、やりかたが分かりません。 サンプルソースの★の部分に button1_Click(sender, System.Web.UI.ImageClickEventArgs.Empty) と入れたら、 「型 'System.EventArgs' のオブジェクトを型 'System.Web.UI.ImageClickEventArgs' にキャストできません。」 というエラーメッセージが表示されてしまいます。 ■■■■■■サンプルソース■■■■■■ Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load   'クエリー取得(数値チェック)   If Request.QueryString("result").ToString = "1" Then     '検索ボタン押下処理を表示する     ★button1_Clickイベントを実行したい。   End If End Sub '検索ボタン押下 Protected Sub button1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles button1.Click '検索結果を表示する     : End Sub

  • 他のFormのクリックイベント

    教えてください! 他のFormのクリックイベントを実行できますか? Form2のButton2をクリックした時に、Form1の「Button1_Click」を実行させることができますか? 出来るとしたら、Form2の「Button2_Click」にはどのように記載したらいいのでしょうか? [Form1]より Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ [Form2]より Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ End Sub 宜しくお願いします。

  • VB2008 comboboxの内容をSelectCaseで使いたい

    VB2008 comboboxの内容をSelectCaseで使いたい いつもお世話になってます。 初めてComboboxを使っています。 リストには 「メロンパン」 「コロッケパン」 「ハンバーガー」 と入っていて、 デバックしそれぞれを選択すれば、無事に指定欄に表示されるようにまではなりました。 ここでストップしてしまいまして、 Selectcase(今週習った)で、 case 1 (メロンパンは120円なので) en=個数x120 case 2 … というようにしたいのですが、 "Select Case ○○"の○○を何にすればいいのか分からないのと、 caseのあとの数字は(リストの上から)0,1,2というように聞いた気がしたのですがそれでよいのかどうか。 見ていただけないでしょうか。 未完成のぼろぼろですが、コードをおのせします。 Public Class Form1 Dim cm, a As String Dim kosu, en As Integer Private Sub ShapeComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShapeComboBox.SelectedIndexChanged txtKaimono.Text = ShapeComboBox.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click kosu = TextBox1.Text Select Case ShapeComboBox Case 0 en = kosu * 120 Case 1 en = kosu * 180 Case 2 End Select End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub End Class

  • VB2008改行できません

    VB2008改行できません お願いします。 メロンパン 3個 240円 コロッケパン 2個 … という風にしたいのですが、 一行目が表示され、2行目の「コロッケパン」を入れた瞬間、 1行目が消え、 コロッケパンのみが表示されます。 なぜでしょうか。 正しいコードと、どのような理屈でそうなるのか頂けると嬉しいです。 Public Class Form1 Dim cm, a As String Dim kosu, en As Integer Private Sub ShapeComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShapeComboBox.SelectedIndexChanged cm = ShapeComboBox.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click kosu = TextBox1.Text Select Case ShapeComboBox.SelectedIndex Case 0 en = kosu * 120 Case 1 en = kosu * 180 Case 2 en = kosu * 240 End Select txtKaimono.Text = cm + kosu.ToString(" ##個") + en.ToString(" #,###円") + vbCrLf End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub End Class