値がにゅうりょくされなかった時の対処法
投稿者 中国  (社会人)
投稿日時
2009/1/4 14:04:05
try~catch文は例外を発生させない為のモノではなく、例外を捕捉するためのものです。
また、今回のような想定範囲内の例外を処理するためにtry~catch文を使うのは止めましょう。
解決策としては、ボタン押下時にmaskedtextboxに入力された文字列の長さをチェックする、などが考えられます。
当たり前ですが上のコードはコピペしても動きません。
足りない箇所は自分で補ってください。
また、今回のような想定範囲内の例外を処理するためにtry~catch文を使うのは止めましょう。
解決策としては、ボタン押下時にmaskedtextboxに入力された文字列の長さをチェックする、などが考えられます。
Private Sub Button1_Click(ByVal sender As System.Object _
, ByVal e As System.EventArgs) Handles Button1.Click
'長さチェック
If maskedtextboxのTextの長さ = 0 Then
'エラーメッセージ表示
MessageBox.Show("HogeHoge")
'処理を抜ける
End If
End Sub
当たり前ですが上のコードはコピペしても動きません。
足りない箇所は自分で補ってください。
投稿者 るきお  (社会人)
投稿日時
2009/1/5 22:24:13
こんにちは。
>いまだにエラーが出ます。
エラーが出て困っている場合は、そのエラーメッセージをそのまま投稿するのが良いですよ。
これはとても重要なことです。
どのようにするとそのエラーがでるのかまで書いてあれば最良です。
>他にもいろいろ試したのですがうまくいかなくて‥
その「いろいろ」についてももう少し触れた方が尚良ですよ。
呼んでいる人にはどこで困っているのかよりよく理解できますし、
万一、その「いろいろ」試したことと同じことを回答で提案された場合に困ってしまいます。
まさか、時間を書いて回答してくれた人に「それはもう試しました」とは言えないでしょう。
>いまだにエラーが出ます。
エラーが出て困っている場合は、そのエラーメッセージをそのまま投稿するのが良いですよ。
これはとても重要なことです。
どのようにするとそのエラーがでるのかまで書いてあれば最良です。
>他にもいろいろ試したのですがうまくいかなくて‥
その「いろいろ」についてももう少し触れた方が尚良ですよ。
呼んでいる人にはどこで困っているのかよりよく理解できますし、
万一、その「いろいろ」試したことと同じことを回答で提案された場合に困ってしまいます。
まさか、時間を書いて回答してくれた人に「それはもう試しました」とは言えないでしょう。
投稿者 (削除されました)  ()
投稿日時
2009/1/6 06:05:15
(削除されました)
投稿者 ソウ  (学生)
投稿日時
2009/1/6 06:06:55
中国さん、るきおさん。アドバイスありがとうございます。
中国さんのアドバイスをもとにしてプログラムを書いたところ、値を入力しなかった時に
メッセージボックスにエラーがでるようになりました。ありがとうございました。
しかし、その後formがフリーズして、下記のプログラムのIF文の部分に対して
『formatexeptionはハンドルされませんでした。』
『入力文字列の形式が正しくありません。』
というエラーがでます。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frmItem As Form2 = New Form2(DataSet21, DataSet31)
Dim drRet As DialogResult = frmItem.ShowDialog()
If drRet = Windows.Forms.DialogResult.OK Then
DataSet1.DataTable1.AddDataTable1Row( _
frmItem.ComboBox1.Text, _
frmItem.ComboBox2.Text, _
frmItem.ComboBox3.Text, _
Integer.Parse(frmItem.MaskedTextBox1.Text))
End If
End Sub
上記のプログラムはform1のプログラムです。
今回つくっているのはform2で入力した値をform1のデータセットのデータテーブルに表示させるという
ものなんですが、MaskedTextBox1に値が入力されなかったので、データテーブルに渡す引数がなくて
エラーが出たのではないか?と予想しています。
しかし、対処法が思いつきませんのでなにかアドバイスを下さい。
よろしくお願いいたします。
中国さんのアドバイスをもとにしてプログラムを書いたところ、値を入力しなかった時に
メッセージボックスにエラーがでるようになりました。ありがとうございました。
しかし、その後formがフリーズして、下記のプログラムのIF文の部分に対して
『formatexeptionはハンドルされませんでした。』
『入力文字列の形式が正しくありません。』
というエラーがでます。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frmItem As Form2 = New Form2(DataSet21, DataSet31)
Dim drRet As DialogResult = frmItem.ShowDialog()
If drRet = Windows.Forms.DialogResult.OK Then
DataSet1.DataTable1.AddDataTable1Row( _
frmItem.ComboBox1.Text, _
frmItem.ComboBox2.Text, _
frmItem.ComboBox3.Text, _
Integer.Parse(frmItem.MaskedTextBox1.Text))
End If
End Sub
上記のプログラムはform1のプログラムです。
今回つくっているのはform2で入力した値をform1のデータセットのデータテーブルに表示させるという
ものなんですが、MaskedTextBox1に値が入力されなかったので、データテーブルに渡す引数がなくて
エラーが出たのではないか?と予想しています。
しかし、対処法が思いつきませんのでなにかアドバイスを下さい。
よろしくお願いいたします。
投稿者 neptune  (社会人)
投稿日時
2009/1/6 07:21:29
こんにちは
>今回つくっているのはform2で入力した値をform1のデータセットのデータテーブルに表示させるという
>ものなんですが、MaskedTextBox1に値が入力されなかったので、データテーブルに渡す引数がなくて
>エラーが出たのではないか?と予想しています。
そういう時はウォッチウィンドウを利用します。IDEの左下にある奴です。
そのウォッチ式に
MaskedTextBox1.text
と入力して、
If drRet = Windows.Forms.DialogResult.OK Then・・・
にブレークポイントを置きストップさせてウォッチウィンドウでMaskedTextBox1.textを
観察することが出来ます。
ちなみに、こういう場合、今回のケースでは、
frmItem.ComboBox1.Text・・・・frmItem.MaskedTextBox1.Textのデータが
確実でなければ困るときは処理の前に1つ1つのデータが正当であるか否かのチェックをするのが
一般的な対処法です。
>今回つくっているのはform2で入力した値をform1のデータセットのデータテーブルに表示させるという
>ものなんですが、MaskedTextBox1に値が入力されなかったので、データテーブルに渡す引数がなくて
>エラーが出たのではないか?と予想しています。
そういう時はウォッチウィンドウを利用します。IDEの左下にある奴です。
そのウォッチ式に
MaskedTextBox1.text
と入力して、
If drRet = Windows.Forms.DialogResult.OK Then・・・
にブレークポイントを置きストップさせてウォッチウィンドウでMaskedTextBox1.textを
観察することが出来ます。
ちなみに、こういう場合、今回のケースでは、
frmItem.ComboBox1.Text・・・・frmItem.MaskedTextBox1.Textのデータが
確実でなければ困るときは処理の前に1つ1つのデータが正当であるか否かのチェックをするのが
一般的な対処法です。
投稿者 ソウ  (学生)
投稿日時
2009/1/6 08:22:20
>ちなみに、こういう場合、今回のケースでは、
>frmItem.ComboBox1.Text・・・・frmItem.MaskedTextBox1.Textのデータが
>確実でなければ困るときは処理の前に1つ1つのデータが正当であるか否かのチェックをするのが
>一般的な対処法です。
どのようなチェック方法があるのでしょうか?
このサイトの講座のほうにのってますか?
>frmItem.ComboBox1.Text・・・・frmItem.MaskedTextBox1.Textのデータが
>確実でなければ困るときは処理の前に1つ1つのデータが正当であるか否かのチェックをするのが
>一般的な対処法です。
どのようなチェック方法があるのでしょうか?
このサイトの講座のほうにのってますか?
投稿者 かずき  (社会人)
投稿日時
2009/1/6 16:10:35
If文あたりを使って書きます。
既に示されていますが、これはmaskedtextboxのテキストにちゃんと何か入力されているか否かを
チェックするコードです。
(不完全ではありますが、おそらくソウさんは不完全な部分を補ってコーディングされたと思います)
今回のプログラムですが、maskedtextboxに値が何も入力されなかったときに、どういった
動きにしたいのでしょうか?
エラーメッセージを表示することはわかりますが、その後の動きについては何パターンか
考えられます。
(1)form2は閉じずに、ユーザに再度値を入力してもらう
(2)form2は閉じて、以後の処理は行われない
(3)アプリケーションを終了する
など
どういった動きにしたいのかによって、書くプログラムは変わってきます。
'長さチェック
If maskedtextboxのTextの長さ = 0 Then
'エラーメッセージ表示
MessageBox.Show("HogeHoge")
'処理を抜ける
End If
既に示されていますが、これはmaskedtextboxのテキストにちゃんと何か入力されているか否かを
チェックするコードです。
(不完全ではありますが、おそらくソウさんは不完全な部分を補ってコーディングされたと思います)
今回のプログラムですが、maskedtextboxに値が何も入力されなかったときに、どういった
動きにしたいのでしょうか?
エラーメッセージを表示することはわかりますが、その後の動きについては何パターンか
考えられます。
(1)form2は閉じずに、ユーザに再度値を入力してもらう
(2)form2は閉じて、以後の処理は行われない
(3)アプリケーションを終了する
など
どういった動きにしたいのかによって、書くプログラムは変わってきます。
投稿者 ソウ  (学生)
投稿日時
2009/1/7 02:46:55
Dim Moji As String
Moji = MaskedTextBox1.Text
If Len(Moji) = 0 Then
MsgBox("何も入力されていません")
End If
以上のように書き換え、値が入力されなかった時はエラーメッセージが表示されるようになりました。
今回のプログラムは、maskedtextboxに値が何も入力されなかったときに
『(1)form2は閉じずに、ユーザに再度値を入力してもらう』
を考えています。
Moji = MaskedTextBox1.Text
If Len(Moji) = 0 Then
MsgBox("何も入力されていません")
End If
以上のように書き換え、値が入力されなかった時はエラーメッセージが表示されるようになりました。
今回のプログラムは、maskedtextboxに値が何も入力されなかったときに
『(1)form2は閉じずに、ユーザに再度値を入力してもらう』
を考えています。
投稿者 ソウ  (学生)
投稿日時
2009/1/7 02:49:16
遅れましたがVB2008です。
投稿者 鍵  (社会人)
投稿日時
2009/1/7 03:50:03
こんにちは。
>今回のプログラムは、maskedtextboxに値が何も入力されなかったときに
>『(1)form2は閉じずに、ユーザに再度値を入力してもらう』
>を考えています。
メッセージを表示したあとにExit Subで処理を中断してみては
いかがでしょうか。
>今回のプログラムは、maskedtextboxに値が何も入力されなかったときに
>『(1)form2は閉じずに、ユーザに再度値を入力してもらう』
>を考えています。
メッセージを表示したあとにExit Subで処理を中断してみては
いかがでしょうか。
投稿者 ソウ  (学生)
投稿日時
2009/1/7 05:38:53
>メッセージを表示したあとにExit Subで処理を中断してみては
>いかがでしょうか。
『MsgBox("何も入力されていません")』の次の行にExit Subを書き込むということでしょうか?
これだと処理が中断されてしまって『form2は閉じずに、ユーザに再度値を入力してもらう』が
達成されなくなってしまう気がするのですがどうなのでしょうか?
実際試したところ以前と同じようにエラーメッセージがでたあとformがフリーズしてしまいました。
>いかがでしょうか。
『MsgBox("何も入力されていません")』の次の行にExit Subを書き込むということでしょうか?
これだと処理が中断されてしまって『form2は閉じずに、ユーザに再度値を入力してもらう』が
達成されなくなってしまう気がするのですがどうなのでしょうか?
実際試したところ以前と同じようにエラーメッセージがでたあとformがフリーズしてしまいました。
投稿者 鍵  (社会人)
投稿日時
2009/1/7 06:37:03
すみません、ちょっと軽率すぎたようです。
MaskedTextBoxはButton1とは別のFormにあるのですね。
てっきりMaskedTextBoxもButton1と同じFormに
あるものだと勘違いしていました。
入力チェックはどのタイミングで行っているのでしょうか?
MaskedTextBoxのValidatingイベントや
Form2のFormClosingイベントで入力チェックを行い、
入力されていなければ e.Cancel = True 等で
Formを閉じる処理をキャンセルする・・・という方法でうまくいきませんかね。
MaskedTextBoxはButton1とは別のFormにあるのですね。
てっきりMaskedTextBoxもButton1と同じFormに
あるものだと勘違いしていました。
入力チェックはどのタイミングで行っているのでしょうか?
MaskedTextBoxのValidatingイベントや
Form2のFormClosingイベントで入力チェックを行い、
入力されていなければ e.Cancel = True 等で
Formを閉じる処理をキャンセルする・・・という方法でうまくいきませんかね。
投稿者 ソウ  (学生)
投稿日時
2009/1/7 09:45:36
>MaskedTextBoxはButton1とは別のFormにあるのですね。
>てっきりMaskedTextBoxもButton1と同じFormに
>あるものだと勘違いしていました。
いえ、MaskedTextBoxもButton1もForm2にあります。
Button1を押すとForm1のDaraGridViewに値を表示するようになっています。
>入力チェックはどのタイミングで行っているのでしょうか?
Form2のButton1でやっていました。
>MaskedTextBoxのValidatingイベントや
>Form2のFormClosingイベントで入力チェックを行い、
>入力されていなければ e.Cancel = True 等で
>Formを閉じる処理をキャンセルする・・・という方法でうまくいきませんかね。
すみません。e.Cancel = True とはどのような意味でどういった使い方をするのでしょうか?
参考書やここの講座などで探したのですが、いまいちよく分かりません。
教えていただけないでしょうか?
>てっきりMaskedTextBoxもButton1と同じFormに
>あるものだと勘違いしていました。
いえ、MaskedTextBoxもButton1もForm2にあります。
Button1を押すとForm1のDaraGridViewに値を表示するようになっています。
>入力チェックはどのタイミングで行っているのでしょうか?
Form2のButton1でやっていました。
>MaskedTextBoxのValidatingイベントや
>Form2のFormClosingイベントで入力チェックを行い、
>入力されていなければ e.Cancel = True 等で
>Formを閉じる処理をキャンセルする・・・という方法でうまくいきませんかね。
すみません。e.Cancel = True とはどのような意味でどういった使い方をするのでしょうか?
参考書やここの講座などで探したのですが、いまいちよく分かりません。
教えていただけないでしょうか?
投稿者 るしぇ  (社会人)
投稿日時
2009/1/7 10:39:41
>すみません。e.Cancel = True とはどのような意味でどういった使い方をするのでしょうか?
その前に説明されているイベントのヘルプ(MSDN)に書いてあります。
[Form.Closing イベント]
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form.closing(VS.80).aspx
[Control.Validating イベント]
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.validating(VS.80).aspx
どっちも使用例としてサンプルコードが書かれています。
このサイトでは
[Visual Basic 中学校 > 初級講座 > 第13回 取りこぼした重要なトピック]
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard13.htm
>5.プログラムを終了させる方法
で解説されています。
その前に説明されているイベントのヘルプ(MSDN)に書いてあります。
[Form.Closing イベント]
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.form.closing(VS.80).aspx
[Control.Validating イベント]
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.validating(VS.80).aspx
どっちも使用例としてサンプルコードが書かれています。
このサイトでは
[Visual Basic 中学校 > 初級講座 > 第13回 取りこぼした重要なトピック]
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard13.htm
>5.プログラムを終了させる方法
で解説されています。
投稿者 ソウ  (学生)
投稿日時
2009/1/7 12:23:18
e.Cancel = True の方理解できました。
第13回 取りこぼした重要なトピックは見ていたのですが、その時は理解できなくて
改めて読んだところ理解することができました。ありがとうございました。
鍵さんに提案していただいたFormClosingイベントを使って無事にエラーが出ることなく処理を
すすめることができるようになりました。ありがとうございました。
そこで、また新たな疑問ができました。
Form1のDaraGridViewに表示されている値の中から、選択した行を削除する機能を造りたくて
Private Sub DeleteData()
Dim nowRow As Integer = dgv.CurrentRow.Index
dgv.Rows.RemoveAt(nowRow)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
DeleteData()
End Sub
と書いたのですが、なぜか『dgvは宣言されていません』というエラーがでます。
dgvは宣言する必要ないのでは?
なぜでしょうか?
第13回 取りこぼした重要なトピックは見ていたのですが、その時は理解できなくて
改めて読んだところ理解することができました。ありがとうございました。
鍵さんに提案していただいたFormClosingイベントを使って無事にエラーが出ることなく処理を
すすめることができるようになりました。ありがとうございました。
そこで、また新たな疑問ができました。
Form1のDaraGridViewに表示されている値の中から、選択した行を削除する機能を造りたくて
Private Sub DeleteData()
Dim nowRow As Integer = dgv.CurrentRow.Index
dgv.Rows.RemoveAt(nowRow)
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
DeleteData()
End Sub
と書いたのですが、なぜか『dgvは宣言されていません』というエラーがでます。
dgvは宣言する必要ないのでは?
なぜでしょうか?
投稿者 かずき  (社会人)
投稿日時
2009/1/7 15:53:26
デザイナでFormに置いたDataGridViewの名前にdgvとつけていますか?
投稿者 レオ♪  (小学生)
投稿日時
2009/1/7 21:55:39
基礎構築を、きちんとやった方がいいですね。
前進しすぎても、壁が次々とでる感じ。
分岐プログラムも色々と調べた方がいいよ。
IF文
Select Case
Goto文とかさ。
Returnとか結構~役にたつね。
ではでは。っか僕チンは8ヶ月の若葉マーク君ですが。
前進しすぎても、壁が次々とでる感じ。
分岐プログラムも色々と調べた方がいいよ。
IF文
Select Case
Goto文とかさ。
Returnとか結構~役にたつね。
ではでは。っか僕チンは8ヶ月の若葉マーク君ですが。
投稿者 ソウ  (学生)
投稿日時
2009/1/8 00:55:10
>かずきさん
ありがとうございました。解決しました。
>レオ♪さん
その通りだと思います。何しろ時間がないもので‥
しっかり基礎から勉強したいと思います。
ありがとうございました。解決しました。
>レオ♪さん
その通りだと思います。何しろ時間がないもので‥
しっかり基礎から勉強したいと思います。
投稿者 若葉マークのレオです  (小学生)
投稿日時
2009/1/8 15:52:58
そうゆう意味ではないけどね。
まじめそうなんで書いたんですよ。
いろいろ、やり方のある例です。
コードは自由自在。正しいとか、そんなの関係ねぇ~(小島風)
まじめそうなんで書いたんですよ。
いろいろ、やり方のある例です。
コードは自由自在。正しいとか、そんなの関係ねぇ~(小島風)
Option Strict On
'VisualBasic2008
'テキストボックス1と2を用意
'ボタン1,2,3を用意します
'a+bの答えを表示する例(3通り)
Public Class Form1
Private kotae As Integer
Private a, b As Integer
Private Sub tasizan()
Try
a = CInt(TextBox1.Text) : b = CInt(TextBox2.Text)
kotae = a + b
Catch ex As Exception
MsgBox(ex.ToString)
Return
End Try
MsgBox(kotae)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox1.Text = Nothing Or TextBox2.Text = Nothing Then
MsgBox("両方のテキストボックスに入力してね♪")
Return
End If
tasizan()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If TextBox1.Text = Nothing And TextBox2.Text = Nothing Then GoTo 20
If TextBox1.Text = Nothing Then GoTo 10
If TextBox2.Text = Nothing Then GoTo 30
GoTo 40
10: MsgBox("左側のテキストボックスに入力してね♪") : Return
20: MsgBox("両方のテキストボックスに入力してね♪") : Return
30: MsgBox("右側のテキストボックスに入力してね♪") : Return
40: tasizan()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Select Case TextBox1.Text
Case Nothing
MsgBox("左側のテキストボックスに入力してね♪") : Return
End Select
Select Case TextBox2.Text
Case Nothing
MsgBox("右側のテキストボックスに入力してね♪") : Return
End Select
tasizan()
End Sub
End Class
投稿者 かずき  (社会人)
投稿日時
2009/1/9 16:06:23
個人的にButton2とButton3の書き方は無いかな。
Button2
GoTo文をあえてこの状況で使うメリットが見えない。
Button3
Selectは、複数の分岐を書くためのものだから
この場合はIf文のほうが思考的に自然。
Button2
GoTo文をあえてこの状況で使うメリットが見えない。
Button3
Selectは、複数の分岐を書くためのものだから
この場合はIf文のほうが思考的に自然。
投稿者 レオ♪  (小学生)
投稿日時
2009/1/9 21:35:17
サンプルですよ。
土台にして応用するのは、ユーザーしだいです。
かずん君じゃないの?
モグラたたきのコードは2箇所バグってるよ。
Basicは専門外でしょ?www
土台にして応用するのは、ユーザーしだいです。
かずん君じゃないの?
モグラたたきのコードは2箇所バグってるよ。
Basicは専門外でしょ?www
投稿者 かずき  (社会人)
投稿日時
2009/1/9 21:46:47
サンプルコードでも、このプログラムがどういった意図があるから
どういった書き方をするのが一番いいのか?ということを
考えてプログラミングするのが良いと考えています。
今回は、OKか?NGか?の二択なのでおとなしくIFくらいで
いいのかな(GoToは絶対つかう場所ではないと思う)って
思いました。
> かずん君じゃないの?
以前からレオさんは、勝手に人を犯罪者にしたり別の人と勘違いされて
しまう傾向があるみたいですね。
私は、「かずき」で「かずん」さんではありません。
(以前は桜という名前でここに書込みはしてましたが)
どういった書き方をするのが一番いいのか?ということを
考えてプログラミングするのが良いと考えています。
今回は、OKか?NGか?の二択なのでおとなしくIFくらいで
いいのかな(GoToは絶対つかう場所ではないと思う)って
思いました。
> かずん君じゃないの?
以前からレオさんは、勝手に人を犯罪者にしたり別の人と勘違いされて
しまう傾向があるみたいですね。
私は、「かずき」で「かずん」さんではありません。
(以前は桜という名前でここに書込みはしてましたが)
投稿者 レオ♪  (小学生)
投稿日時
2009/1/10 21:22:21
論点がアレだ。www
goto文は見やすいしバグも発見しやすいとゆう長所もある。
それに、コードの高度大会でもないしね(笑)
使いやすさ、と、簡単が長所のBasicだ。
難しくしてどうするんだい。
僕チンは今回は引数も使ってないし、わかりやすかろう。
どこかの3流の大学教授の入門書より価値はあるね♪
goto文は見やすいしバグも発見しやすいとゆう長所もある。
それに、コードの高度大会でもないしね(笑)
使いやすさ、と、簡単が長所のBasicだ。
難しくしてどうするんだい。
僕チンは今回は引数も使ってないし、わかりやすかろう。
どこかの3流の大学教授の入門書より価値はあるね♪
投稿者 どくろべえ  (学生)
投稿日時
2009/1/10 22:14:27
レオさんのコードは毎回毎回見辛くて困るんですが、どうにかなりませんか?
2009/01/08 6:52:58 のサンプルについて、ちょっと聞きたいんですが
「kotae」と「a」、「b」それぞれをクラスのメンバ変数にしているのは何故ですか?
見た所tasizanメソッド以外で使用していない用ですが、何か意味があるんですか?
サンプルと言うなら、意味の無いコードは書かないと思うんですが、僕にはレオさんの意図が汲み取れません。
もしかして、変数のスコープについてご存知ないのでしょうか?
それと、8ヶ月もやってて、未だにgoto文が見やすいとか、本気で言ってるんですか?
もし、本気で言っているのだとしたらレオさんはプログラミングに向いていないのだと思います。
僕はVB.NETの経験3ヶ月程の若葉(笑)ですが、その位は分かります。
2009/01/08 6:52:58 のサンプルについて、ちょっと聞きたいんですが
「kotae」と「a」、「b」それぞれをクラスのメンバ変数にしているのは何故ですか?
見た所tasizanメソッド以外で使用していない用ですが、何か意味があるんですか?
サンプルと言うなら、意味の無いコードは書かないと思うんですが、僕にはレオさんの意図が汲み取れません。
もしかして、変数のスコープについてご存知ないのでしょうか?
それと、8ヶ月もやってて、未だにgoto文が見やすいとか、本気で言ってるんですか?
もし、本気で言っているのだとしたらレオさんはプログラミングに向いていないのだと思います。
僕はVB.NETの経験3ヶ月程の若葉(笑)ですが、その位は分かります。
投稿者 n  (社会人)
投稿日時
2009/1/10 22:46:48
アレですよね。
サンプルはサンプルですもんね。
サンプルは勉強する目的のためにあるんですよね。
サンプルコードはあえて汚くしてるんですよね。
ということでサンプルを書いてみる。
If文、Goto文、Select Case文を書いてみた。
作法やらいろいろ無視はしてるけど、多分動くはず。確認はしていない。
サンプルはサンプルですもんね。
サンプルは勉強する目的のためにあるんですよね。
サンプルコードはあえて汚くしてるんですよね。
ということでサンプルを書いてみる。
If文、Goto文、Select Case文を書いてみた。
作法やらいろいろ無視はしてるけど、多分動くはず。確認はしていない。
Option Strict On
'VisualBasic2008
'テキストボックスを2つ、ボタンを3つ用意
'2つのテキストボックスに入力された整数の和を求める
Public Class Form1
Private Function Calc(ByVal calcA As Integer, ByVal calcB As Integer) As Integer
Return calcA + calcB
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Not IsNumeric(TextBox1.Text) Then
MsgBox("左側の入力が間違ってるぜ!")
ElseIf Not IsNumeric(TextBox2.Text) Then
MsgBox("右側の入力が間違ってるぜ!")
Else
MsgBox(Calc(CInt(TextBox1.Text), CInt(TextBox2.Text))
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If Not IsNumeric(TextBox1.Text) Then GoTo 10
If Not IsNumeric(TextBox2.Text) Then GoTo 20
GoTo 30
10: MsgBox("左側の入力が間違ってるぜ!")
20: MsgBox("右側の入力が間違ってるぜ!")
Return
30: MsgBox(Calc(CInt(TextBox1.Text), CInt(TextBox2.Text))
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Select Case True
Case Not IsNumeric(TextBox1.Text)
MsgBox("左側の入力が間違ってるぜ!")
Case Not IsNumeric(TextBox2.Text)
MsgBox("右側の入力が間違ってるぜ!")
Case Else
MsgBox(Calc(CInt(TextBox1.Text), CInt(TextBox2.Text))
End Select
End Sub
End Class
投稿者 n  (社会人)
投稿日時
2009/1/10 22:49:23
多少のTypoも気にしないでくれw
投稿者 ソウ  (学生)
投稿日時
2009/1/11 02:53:28
皆様サンプルコードありがとうございます。
ところで、
e.Cancel = True ってFormのClosingイベントでしか使えないのですか?
ButtonのClickイベントで使いたいのですが同様のコードはありますか?
ButtonのClickイベントで
Formを閉じる。
でも~の場合はやっぱり閉じない。
というものを作りたいのです。
ところで、
e.Cancel = True ってFormのClosingイベントでしか使えないのですか?
ButtonのClickイベントで使いたいのですが同様のコードはありますか?
ButtonのClickイベントで
Formを閉じる。
でも~の場合はやっぱり閉じない。
というものを作りたいのです。
投稿者 どくろべえ  (学生)
投稿日時
2009/1/11 03:17:39
逆に質問。
Formを閉じる処理はどうやってる?
Formを閉じる処理はどうやってる?
投稿者 (削除されました)  ()
投稿日時
2009/1/11 03:33:21
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2009/1/11 03:52:31
(削除されました)
投稿者 そう  (学生)
投稿日時
2009/1/11 03:55:18
buttonコントロールのDialogResultプロパティで設定しました。
投稿者 どくろべえ  (学生)
投稿日時
2009/1/11 04:08:26
>buttonコントロールのDialogResultプロパティで設定しました。
なるほど。
それだとButtonのClickイベントでCancelする事はできません。
どうしてもButtonのClickイベントで処理したければ、DialogResultプロパティの設定を解除して
Clickイベント内で以下のようにすればOKです。
なるほど。
それだとButtonのClickイベントでCancelする事はできません。
どうしてもButtonのClickイベントで処理したければ、DialogResultプロパティの設定を解除して
Clickイベント内で以下のようにすればOKです。
If 閉じる時の条件がTrue Then
Me.Close()
End If
投稿者 (削除されました)  ()
投稿日時
2009/1/11 04:14:10
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2009/1/11 04:38:13
(削除されました)
投稿者 かずき  (社会人)
投稿日時
2009/1/11 07:57:13
閉じるのをキャンセルするという発想じゃなくて、必要なときに閉じるように
命令するという逆の考え方のほうが今回の場合いいのかもしれません。
## やり方
DialogResultにOKを設定してるボタンのDialogResultをNoneに設定してください。
その後に、ボタンのクリックイベントで
みたいに、閉じたいときにDialogResultプロパティに値を設定すればOKです。
そうすれば、呼び出した側でもDialogResultプロパティを参照できるので
みたいにすることが出来ます。
命令するという逆の考え方のほうが今回の場合いいのかもしれません。
## やり方
DialogResultにOKを設定してるボタンのDialogResultをNoneに設定してください。
その後に、ボタンのクリックイベントで
If 入力OK?
' 何かやることがあるならやる
Me.DialogResult = DialogResult.OK
Return
End If
みたいに、閉じたいときにDialogResultプロパティに値を設定すればOKです。
そうすれば、呼び出した側でもDialogResultプロパティを参照できるので
If form.ShowDialog() = DialogResult.OK
' 何か処理
End If
みたいにすることが出来ます。
投稿者 (削除されました)  ()
投稿日時
2009/1/11 08:18:01
(削除されました)
投稿者 n  (社会人)
投稿日時
2009/1/11 08:22:47
>ButtonのClickイベントで
>Formを閉じる。
>でも~の場合はやっぱり閉じない。
考え方を変えるといいかもね。
条件Aを満たした場合はFormを閉じる、って考えると楽かな。
・・・ってここまで書いてかずきさんとかぶってたことに気づくorz
あと、e.CancelというのはSystem.Windows.Forms.FormClosingEventArgsクラスのCancelプロパティのことであって、Form_Closingイベント以外では使用できない(はず)。
各イベントプロシジャのパラメタの[e As ****EventArgs]ってところをよく見れば違うことがわかる。
>Formを閉じる。
>でも~の場合はやっぱり閉じない。
考え方を変えるといいかもね。
条件Aを満たした場合はFormを閉じる、って考えると楽かな。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'全ての条件が揃わなければ閉じられない
If 条件a AndAlso 条件B AndAlso 条件C Then
Me.Close()
End If
End Sub
・・・ってここまで書いてかずきさんとかぶってたことに気づくorz
あと、e.CancelというのはSystem.Windows.Forms.FormClosingEventArgsクラスのCancelプロパティのことであって、Form_Closingイベント以外では使用できない(はず)。
各イベントプロシジャのパラメタの[e As ****EventArgs]ってところをよく見れば違うことがわかる。
投稿者 ローマ皇帝レオ♪  (小学生)
投稿日時
2009/1/11 16:06:54
そうさん>初心者本は面白いよ。
まぁ、最初のページは簡単だけど、だんだん難しくはなるけどね♪
僕チンは4冊購入したよ。
本はボロボロになるまで何回でも読み返す。面白いから。
クイズ的にサンプルを作っといたよ。
まぁ、最初のページは簡単だけど、だんだん難しくはなるけどね♪
僕チンは4冊購入したよ。
本はボロボロになるまで何回でも読み返す。面白いから。
クイズ的にサンプルを作っといたよ。
Option Strict On
'環境
'Vista
'Visual Basic 2008
'条件
'ComboBox1,Label1,Button1をForm1に配置する
Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Button1.Text = "解答"
Label1.Text = "問題1__>徳川家康の幼名は?"
With Me.ComboBox1.Items
.Add("虎千代")
.Add("松千代")
.Add("影千代")
.Add("竹千代")
End With
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If ComboBox1.Text = Nothing Then
MsgBox("何も選択されてないよ♪") : Return
End If
If MessageBox.Show(ComboBox1.Text, "解答", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = _
DialogResult.No Then
Return
End If
Select Case ComboBox1.SelectedIndex
Case 0, 1, 2
MsgBox("不正解です")
Case 3
MsgBox("正解です")
End Select
End Sub
End Class
投稿者 (削除されました)  ()
投稿日時
2009/1/11 16:59:07
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2009/1/11 17:03:25
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2009/1/11 17:04:01
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2009/1/11 17:10:41
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2009/1/11 17:15:10
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2009/1/11 17:19:58
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2009/1/11 18:28:13
(削除されました)
投稿者 ???  (社会人)
投稿日時
2009/1/18 21:51:23
↑↑↑↑↑↑↑↑↑
な ん だ こ れ
な ん だ こ れ
Form上のcomboboxでアイテムを選択させ、maskedtextbox1に数値を入力させ、buttonを押すとそのアイテム、値を使って処理を進めていくものを作りました。
maskedtextbox1に値を入力しないでbuttonを押した時にエラーを表示させたくて
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Catch ex As Exception
'その他のエラーが発生した場合
MsgBox("その他のエラーが発生しました。", MsgBoxStyle.Critical)
End Try
End Sub
と書いたのですが、いまだにエラーが出ます。
他にもいろいろ試したのですがうまくいかなくて‥
どなたかアドバイスお願いいたします。