none
MicrosoftVB2008Form1.vbのButton表示での「InvalidCastExceptionはハンドルされませんでした」のエラー RRS feed

  • 質問

  • 掲題の件に関し、回答いただきましたが「Sinngleの値ではない」とのことですが、実際には1.6とか1200とか1200.1とかのいずれの数値を入れても同じエラーがでるのですが???何か別の原因なのではないでしょうか?
    御教授方、宜しくお願いします。
    2009年5月5日 8:24

回答

  • こんにちは

    アルファベットなどを入れてCSng を呼び出すとInvalidCastException がスローされます。

    確認なのですが、エラーがでるといわれている箇所にブレークポイントを設定してText2.Text の値を確認してはどうですか?

    すでにやられていたら申し訳ありません。

    2009年5月5日 8:44
  • 下記のスレッドからの続きですよね?
    http://social.msdn.microsoft.com/Forums/ja-JP/vbexpressja/thread/51a9c281-0eac-40f6-8f0f-3cc61389ac68


    同じ問題である間は、同じスレッドで「返信」ボタンを押して話を続けて下さい。
    別スレッドにされると追跡できなくなりますし、スレッドが乱立して読みにくくなるなどの問題を生みます。


    既に回答がついていますが、TextBox2とされるテキストボックスに数値を入れているのですか?
    TextBox1と混同していないかどうか、「MsgBox("WIDTH値は " & TextBox2.Text)」をCSngの前に実行して、どんな値が入っているか確認することをまずしてみてください。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月5日 9:52
    モデレータ
  • 同じ問題で、複数のスレッドを乱立させないようにしましょう。

    理由
    ・このスレッドだけ読んだら、何のことか分からないですよね?
    ・また、他の方のスレッドが埋もれてしまいますよね?

    操作方法
    それぞれの投稿についている「返信」リンク、または「引用」リンクを押してください。
    -----
    とりあえず、ここにつけます。

    >確認なのですが、エラーがでるといわれている箇所にブレークポイントを設定してText2.Text の値を確認してはどうですか?]とのことですが、
    >その値はTextBox、Label及びButtonのコントロールをフォームにドラッグした入力欄に自分で入力する値なのでその時点でSingle値であることは分かっているのですが????

    「分かっている」で済まさず、念のため確認して下さい。
    「自分ではこうだ」と思っていることが、実は全然違う現象だったこともよくあるので。

    それと、InvalidCastExceptionが起きたときに表示される「String "aaaa" から型 'Single' への変換は無効です。」といったメッセージは確認されましたか?
    このメッセージの中のStringの後の二重引用符に囲まれた部分が、実際にキャストしようとしている文字列になります。
    ここの文字列は、想定通りの文字列になっていますか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月5日 10:10
    モデレータ
  • TextBox2をマウスでクリックしてもカーソルがチカチカしないということなのでしょうか? キャレット(カーソルがチカチカ)が表示されないということですので、TextBox2のEnabledがFalseになっている可能性もあります。しかし、この場合はTextBox2の背景色が灰色になるのですぐに気がつかれると思うので違うようにも思います。
    とりあえずTextBo2のプロパティをTextBox1のプロパティと見比べてみて下さい。
    また、TextBo2へ文字列を貼り付けることはできるのでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月5日 13:16
    モデレータ
  • お手間を取らせて申し訳ありません。エラーメッセージは次のごとくです。
    「String "" から型 'Single' への変換は無効です。」

    TextBox1の方も同じやり方をしていて、TextBox2のほうだけでエラーが出ます。
    なをプログラム実行時にTextBox1の方は入力欄にカーソルがチカチカし、1の表示が出るのですがTextBox2の方はそれが出ません。
    又、TextBox2の方で入力したつもりが「WIDTH値は        」と出るだけで数値が出ません。入力されていないということなんでしょうか?
    TextBox2に値が何も入力されていない、入力できていないのでしょう。

    TextBox2に値をきちんと設定しているはずのコードがあるのであれば、見直して下さい。
    TextBox2に実行時にキーボードから入力の操作をしているはずなのであれば、本当にそのテキストボックスはTextBox2なのか、デザイナで確認して下さい。



    このように、例外メッセージから何が問題かを切り分ける材料になることがあります。
    質問する際はエラーメッセージや例外メッセージ等、付随する情報も添えるようにしましょう。

    # 細かいことになりますが、引用リンクからの場合は、返事に不要な部分は削りましょう。
    # 難しいのであれば、返信リンクから開いて、必要な部分をコピペして貼り付けましょう。コピペした部分は行の先頭に「>」などをつけて引用と分かるようにしておくと良いかと。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月5日 13:18
    モデレータ
  • そのブレークポイントを置いた「問題の行」はButton2_Clickの中にあるんですか?
    でも、Button2_Clickに来ないという書き込みもあって、よく分かりません。
    もう少し、具体的に書いて頂けないと、イメージの共有が難しいです。


    ・Button2_Clickはその名前の通り、Button2がクリックされたときに実行されるコードなので、Form1_Load等の他のイベント・メソッドから直接呼び出すことは避けた方が無難です。
    ・TextBox2に値が設定されないことが問題なのであれば、その値を設定している行でブレークを設定しているんでしょうか?


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月5日 23:28
    モデレータ
  • Clickイベントでループしてるのかもしれません。あまり長くないようでしたら、何とか.vbの内容をコピーして貼り付けてみてください。長いようでしたら当該の部分だけ貼り付けて下さい。たぶんあまり長いようだと制限がかかって貼り付けられないと思います。以前のMSDNフォーラムの仕様はそうなっていました。現在はわかりませんが・・・。
    コードを貼り付ける際に、書き込みする部分のすぐ上のツールの右端のアイコンを押すとコードをきれいに入力できるようになりますので、利用してみて下さい。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月6日 1:27
    モデレータ
  • Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            MsgBox("WIDTH値は " & TextBox2.Text)       ←テキストには入力されない
            Dim WIDTH As Single = CSng(TextBox2.Text)   ←ここでエラーが出てとまる
        End Sub
    TextBox2.Text = "123.4" みたいなコードがあるか、フォーム上のTextBox2に自分で数値を入力しないと入らないものですけれど、そういったことはしていますか?
    TextBox2.Textが空っぽなら、CSng関数で例外がスロー(エラーになる)のは至極当然のことです。



    ところで、書籍か何かを参考にされているのでしょうか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月6日 11:27
    モデレータ
  • TexBox2.Textの方はテキストボックスの点滅が無く、テキストボックスをクリックしても変化がありません。
    それでTexBox1と同様に例えは1200.5等の数値をキーボード入力し、ボタン2の方をクリックして内容表示させるのですが、数値が現れません。
    何か入力操作方法が悪いのでしょうか?
    TextBox1でカーソルが点滅している状態で、TextBox2をクリックしても、TextBox1が点滅したままなのですか?

    層だとした場合、TextBox2のEnabledプロパティや、ReadOnlyプロパティの値はどうなっていますか?
    通常、EnabledプロパティはTrue、ReadOnlyプロパティはFalseとなります。


    入力できないのに無理矢理、Button2をクリックしてエラーが出るのは、先も書きましたが当然のことです。
    まず、本当の問題は何なのかをきっちりと自分で見極め、そこから解決できるようにして下さい。

    また、TextBox2に何も入力せずにButton2をクリックしたときのエラー処理を作り込むことも、将来的に必要ですが、今は正常系を落ち着かせましょう。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月6日 13:07
    モデレータ
  • TextBox1でカーソルが点滅している状態で、TextBox2をクリックしても何も変化はありません
    ここを何とかしましょう。
    Button2をクリックすることはひとまず忘れましょう。

    また、textBox2のEnabledプロパティーはTrueとなっています。ReadOnlyプロパティーというのは見当たりませんがどこを見ればわかるのでしょうか?。
    え?見つかりませんか?
    というより、そのTextBox2と呼んでいるものは、本当にTextBoxコントロールなのですか?
    デザイナ画面でそのTextBox2を選択したときに、プロパティのところでコントロールの名前とどこのクラスかが表示されていると思いますが、それはSystem.Windows.Forms.TextBoxになっていますか?

    参考: http://azulean.spaces.live.com/blog/cns!9E1932AF4BE9E15D!185.entry


    ところで、周りに有識者・経験者の方はいないのですか?
    問題は何かをWeb上で探っていくよりは、実際に見て、話した方が何十倍・何百倍も早く解決できそうなので…。

    また、系統立てて説明されている、自分にとって分かりやすい書籍を買ってみて、それで学んでいくのも手かと思います。


    # 私事ですが、GW終了につき、早朝・深夜しか出没しなくなります。あしからずご了承下さい。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月6日 14:56
    モデレータ
  • アクアと申します。どうぞ宜しくお願いします。
    trapemiyaさん、Azuleanさんのアドバイスがあるのにもかかわらず割り込んでしまい申し訳ありません。

    さて、すでに助言のあったTextBox2のプロパティが
     Enabled = True
     ReadOnly = False
    となっていて、TextBox2への入力が可能だったとします。
    その上で、こんなコードに差し替えてテストしてみるとどうでしょうか?

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim WIDTH As Single
        If TextBox2.Text.Length <> 0 Then
          Try
            WIDTH = CSng(TextBox2.Text)
            MessageBox.Show("WIDTH値は " & TextBox2.Text)
            ' MessageBox.Show("WIDTH値は " & WIDTH.ToString()) でも可
          Catch ex As Exception
            ' TextBox2に文字列が入力されている時に表示
            MessageBox.Show("数値を入力してください。" + vbCrLf + "文字はダメよ♪")
          End Try
        Else
       ' TextBox2に何も入力がされていない時に表示
          MessageBox.Show("何も入力されていません。")
        End If
      End Sub
    アクア@わんくま同盟
    2009年5月7日 8:13

すべての返信

  • こんにちは

    アルファベットなどを入れてCSng を呼び出すとInvalidCastException がスローされます。

    確認なのですが、エラーがでるといわれている箇所にブレークポイントを設定してText2.Text の値を確認してはどうですか?

    すでにやられていたら申し訳ありません。

    2009年5月5日 8:44
  • 下記のスレッドからの続きですよね?
    http://social.msdn.microsoft.com/Forums/ja-JP/vbexpressja/thread/51a9c281-0eac-40f6-8f0f-3cc61389ac68


    同じ問題である間は、同じスレッドで「返信」ボタンを押して話を続けて下さい。
    別スレッドにされると追跡できなくなりますし、スレッドが乱立して読みにくくなるなどの問題を生みます。


    既に回答がついていますが、TextBox2とされるテキストボックスに数値を入れているのですか?
    TextBox1と混同していないかどうか、「MsgBox("WIDTH値は " & TextBox2.Text)」をCSngの前に実行して、どんな値が入っているか確認することをまずしてみてください。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月5日 9:52
    モデレータ
  • 同じ問題で、複数のスレッドを乱立させないようにしましょう。

    理由
    ・このスレッドだけ読んだら、何のことか分からないですよね?
    ・また、他の方のスレッドが埋もれてしまいますよね?

    操作方法
    それぞれの投稿についている「返信」リンク、または「引用」リンクを押してください。
    -----
    とりあえず、ここにつけます。

    >確認なのですが、エラーがでるといわれている箇所にブレークポイントを設定してText2.Text の値を確認してはどうですか?]とのことですが、
    >その値はTextBox、Label及びButtonのコントロールをフォームにドラッグした入力欄に自分で入力する値なのでその時点でSingle値であることは分かっているのですが????

    「分かっている」で済まさず、念のため確認して下さい。
    「自分ではこうだ」と思っていることが、実は全然違う現象だったこともよくあるので。

    それと、InvalidCastExceptionが起きたときに表示される「String "aaaa" から型 'Single' への変換は無効です。」といったメッセージは確認されましたか?
    このメッセージの中のStringの後の二重引用符に囲まれた部分が、実際にキャストしようとしている文字列になります。
    ここの文字列は、想定通りの文字列になっていますか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月5日 10:10
    モデレータ
  • 同じ問題で、複数のスレッドを乱立させないようにしましょう。

    理由
    ・このスレッドだけ読んだら、何のことか分からないですよね?
    ・また、他の方のスレッドが埋もれてしまいますよね?

    操作方法
    それぞれの投稿についている「返信」リンク、または「引用」リンクを押してください。
    -----
    とりあえず、ここにつけます。

    >確認なのですが、エラーがでるといわれている箇所にブレークポイントを設定してText2.Text の値を確認してはどうですか?]とのことですが、
    >その値はTextBox、Label及びButtonのコントロールをフォームにドラッグした入力欄に自分で入力する値なのでその時点でSingle値であることは分かっているのですが????

    「分かっている」で済まさず、念のため確認して下さい。
    「自分ではこうだ」と思っていることが、実は全然違う現象だったこともよくあるので。

    それと、InvalidCastExceptionが起きたときに表示される「String "aaaa" から型 'Single' への変換は無効です。」といったメッセージは確認されましたか?
    このメッセージの中のStringの後の二重引用符に囲まれた部分が、実際にキャストしようとしている文字列になります。
    ここの文字列は、想定通りの文字列になっていますか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    お手間を取らせて申し訳ありません。エラーメッセージは次のごとくです。「String "" から型 'Single' への変換は無効です。」TextBox1の方も同じやり方をしていて、TextBox2のほうだけでエラーが出ます。なをプログラム実行時にTextBox1の方は入力欄にカーソルがチカチカし、1の表示が出るのですがTextBox2の方はそれが出ません。又、TextBox2の方で入力したつもりが「WIDTH値は        」と出るだけで数値が出ません。入力されていないということなんでしょうか?
    2009年5月5日 12:10
  • TextBox2をマウスでクリックしてもカーソルがチカチカしないということなのでしょうか? キャレット(カーソルがチカチカ)が表示されないということですので、TextBox2のEnabledがFalseになっている可能性もあります。しかし、この場合はTextBox2の背景色が灰色になるのですぐに気がつかれると思うので違うようにも思います。
    とりあえずTextBo2のプロパティをTextBox1のプロパティと見比べてみて下さい。
    また、TextBo2へ文字列を貼り付けることはできるのでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月5日 13:16
    モデレータ
  • お手間を取らせて申し訳ありません。エラーメッセージは次のごとくです。
    「String "" から型 'Single' への変換は無効です。」

    TextBox1の方も同じやり方をしていて、TextBox2のほうだけでエラーが出ます。
    なをプログラム実行時にTextBox1の方は入力欄にカーソルがチカチカし、1の表示が出るのですがTextBox2の方はそれが出ません。
    又、TextBox2の方で入力したつもりが「WIDTH値は        」と出るだけで数値が出ません。入力されていないということなんでしょうか?
    TextBox2に値が何も入力されていない、入力できていないのでしょう。

    TextBox2に値をきちんと設定しているはずのコードがあるのであれば、見直して下さい。
    TextBox2に実行時にキーボードから入力の操作をしているはずなのであれば、本当にそのテキストボックスはTextBox2なのか、デザイナで確認して下さい。



    このように、例外メッセージから何が問題かを切り分ける材料になることがあります。
    質問する際はエラーメッセージや例外メッセージ等、付随する情報も添えるようにしましょう。

    # 細かいことになりますが、引用リンクからの場合は、返事に不要な部分は削りましょう。
    # 難しいのであれば、返信リンクから開いて、必要な部分をコピペして貼り付けましょう。コピペした部分は行の先頭に「>」などをつけて引用と分かるようにしておくと良いかと。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月5日 13:18
    モデレータ
  • 問題の行の手前にブレークポイントを設けて、その後、F8キーを押してプログラムを進めていきましたら、問題になっているPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickのSubへ進まず、その手前のプログラムをぐるぐる回っているだけのようです。一番上の    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loadに問題のSubプログラムへ飛ぶように「Button2_Click」等の字句を入れてみましたが「式が必要です」といったエラーメッセージが出ます。要は問題の行へプログラムが進まないのが原因のようです。どう対応したらその部分へ進むのでしょうか?
    2009年5月5日 23:05
  • そのブレークポイントを置いた「問題の行」はButton2_Clickの中にあるんですか?
    でも、Button2_Clickに来ないという書き込みもあって、よく分かりません。
    もう少し、具体的に書いて頂けないと、イメージの共有が難しいです。


    ・Button2_Clickはその名前の通り、Button2がクリックされたときに実行されるコードなので、Form1_Load等の他のイベント・メソッドから直接呼び出すことは避けた方が無難です。
    ・TextBox2に値が設定されないことが問題なのであれば、その値を設定している行でブレークを設定しているんでしょうか?


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月5日 23:28
    モデレータ
  • 問題になっている行にブレークポイントを設けて、F5キーを押してプログラムスタートさせるとその行が黄色で着色され、そのエラーメッセージが「String””から型’Single’への変換は無効です。」と出ます。やはり一番目のテキストラベルには入力できているのに同じような指令なのに二番目のテキストラベルへの入力は出来ていないようです。ちなみに前にも記述しましたが二番目のテキストラベルのところではカーソルがちかちかしないです。だからその命令行に行っていないのではと思うわけです。ところでプログラムをチェックして頂くために本プログラムを添付することは出来ないのでしょうか?
     それと問題の行にプレークポイントを設けてF5キーでデバッグを進めた後、F8キーでプログラム行を進めようとしてもその後はButtonClick行へは行かずにその手前のプログラムの中をぐるぐる回るだけになってしまいます。???
     宜しくご指導いだだけますようお願いします。
    2009年5月6日 0:20
  • Clickイベントでループしてるのかもしれません。あまり長くないようでしたら、何とか.vbの内容をコピーして貼り付けてみてください。長いようでしたら当該の部分だけ貼り付けて下さい。たぶんあまり長いようだと制限がかかって貼り付けられないと思います。以前のMSDNフォーラムの仕様はそうなっていました。現在はわかりませんが・・・。
    コードを貼り付ける際に、書き込みする部分のすぐ上のツールの右端のアイコンを押すとコードをきれいに入力できるようになりますので、利用してみて下さい。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月6日 1:27
    モデレータ
  •  問題のプログラムコードをコードブロックの挿入のほうにコピーしてみましたが確認できますでしょうか?。
     後ろの方のButton2.Clickのコードでプログラムが止まります。キー入力したものが取り込めていないようです。
     宜しくお願いします。
    2009年5月6日 1:53
  • コードが見えていないようです。長すぎるのでしょうか?コードを挿入する時に何かメッセージが出ていませんでしたか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月6日 1:56
    モデレータ
  • 長すぎるというのは記述コードの長さでしょうか?一番目のテキストボタンにはうまく入力できているのに二番目の方には入力できていないようですが記述コードの長さは同じです。このテキストボタンのフォームに於いては複数個のテキストボタンが設定できないというようなことは無いですよね?諦めて数値をテキストボタンから入力するのではなくプログラムに直接そのつど書き換える方法で進めざるをえないかなと思いつつもありますが。

    2009年5月6日 3:01
  •  問題のプログラムコードをコードブロックの挿入のほうにコピーしてみましたが確認できますでしょうか?。
     後ろの方のButton2.Clickのコードでプログラムが止まります。キー入力したものが取り込めていないようです。
     宜しくお願いします。

    とありますが。コードがないので確認できません。質問者さんは自分でプログラムが貼り付けられていないこと確認できますよね?
    2009年5月6日 3:34
  • 長すぎるというのは記述コードの長さでしょうか?
    いえ、このMSDNフォーラムに貼り付けられる長さのことを言っています。以前は制限があったものですから。
    コードの掲載をもう一度トライしてみて下さい。ただし、公開されてまずい情報があれば事前にご検討下さい。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月6日 4:28
    モデレータ
  • すみません。コードブロックの挿入欄に貼り付けたつもりでしたが。以下に再度、関係部分のみのコードを貼り付けます。宜しくお願いします。


       End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            MsgBox("THIM値は " & TextBox1.Text)
            Dim THIM As Single = CSng(TextBox1.Text)
        End Sub

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            MsgBox("WIDTH値は " & TextBox2.Text)       ←テキストには入力されない
            Dim WIDTH As Single = CSng(TextBox2.Text)   ←ここでエラーが出てとまる
        End Sub

    2009年5月6日 11:18
  • Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            MsgBox("WIDTH値は " & TextBox2.Text)       ←テキストには入力されない
            Dim WIDTH As Single = CSng(TextBox2.Text)   ←ここでエラーが出てとまる
        End Sub
    TextBox2.Text = "123.4" みたいなコードがあるか、フォーム上のTextBox2に自分で数値を入力しないと入らないものですけれど、そういったことはしていますか?
    TextBox2.Textが空っぽなら、CSng関数で例外がスロー(エラーになる)のは至極当然のことです。



    ところで、書籍か何かを参考にされているのでしょうか?
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月6日 11:27
    モデレータ
  • TexBox1.Textの方はフォーム上のテキストボックスがカーソル点滅しているのでキーボード入力し、ボタンクリックして順当に入力した内容が表示されます。TexBox2.Textの方はテキストボックスの点滅が無く、テキストボックスをクリックしても変化がありません。それでTexBox1と同様に例えは1200.5等の数値をキーボード入力し、ボタン2の方をクリックして内容表示させるのですが、数値が現れません。何か入力操作方法が悪いのでしょうか?書籍はありませんがMicrosoftVBのヘルプのガイドツアーなりで学習しているところです。昔、N88Basicで作成したプログラムをまず、VBで再作成したいなと思い最近、学習し始めたところなんです。
    2009年5月6日 12:47
  • TexBox2.Textの方はテキストボックスの点滅が無く、テキストボックスをクリックしても変化がありません。
    それでTexBox1と同様に例えは1200.5等の数値をキーボード入力し、ボタン2の方をクリックして内容表示させるのですが、数値が現れません。
    何か入力操作方法が悪いのでしょうか?
    TextBox1でカーソルが点滅している状態で、TextBox2をクリックしても、TextBox1が点滅したままなのですか?

    層だとした場合、TextBox2のEnabledプロパティや、ReadOnlyプロパティの値はどうなっていますか?
    通常、EnabledプロパティはTrue、ReadOnlyプロパティはFalseとなります。


    入力できないのに無理矢理、Button2をクリックしてエラーが出るのは、先も書きましたが当然のことです。
    まず、本当の問題は何なのかをきっちりと自分で見極め、そこから解決できるようにして下さい。

    また、TextBox2に何も入力せずにButton2をクリックしたときのエラー処理を作り込むことも、将来的に必要ですが、今は正常系を落ち着かせましょう。
    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月6日 13:07
    モデレータ
  • TextBox1でカーソルが点滅している状態で、TextBox2をクリックしても何も変化はありませんがButton2をクリックしたら、TextBox1の点滅は消えて、「WIDTH値は       」と数値無しの表示が出てOKを押した後に例のエラーメッセージが出ます。また、textBox2のEnabledプロパティーはTrueとなっています。ReadOnlyプロパティーというのは見当たりませんがどこを見ればわかるのでしょうか?。
    2009年5月6日 14:26
  • TextBox1でカーソルが点滅している状態で、TextBox2をクリックしても何も変化はありません
    ここを何とかしましょう。
    Button2をクリックすることはひとまず忘れましょう。

    また、textBox2のEnabledプロパティーはTrueとなっています。ReadOnlyプロパティーというのは見当たりませんがどこを見ればわかるのでしょうか?。
    え?見つかりませんか?
    というより、そのTextBox2と呼んでいるものは、本当にTextBoxコントロールなのですか?
    デザイナ画面でそのTextBox2を選択したときに、プロパティのところでコントロールの名前とどこのクラスかが表示されていると思いますが、それはSystem.Windows.Forms.TextBoxになっていますか?

    参考: http://azulean.spaces.live.com/blog/cns!9E1932AF4BE9E15D!185.entry


    ところで、周りに有識者・経験者の方はいないのですか?
    問題は何かをWeb上で探っていくよりは、実際に見て、話した方が何十倍・何百倍も早く解決できそうなので…。

    また、系統立てて説明されている、自分にとって分かりやすい書籍を買ってみて、それで学んでいくのも手かと思います。


    # 私事ですが、GW終了につき、早朝・深夜しか出没しなくなります。あしからずご了承下さい。


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年5月6日 14:56
    モデレータ
  • すみません。Label2の方を見ていました。TextBox2.System.Windows.Formsの方ではEnabled:True,ReadOnly:Falseとなっています。これはこれで良いのですね。今後とも出来る範囲で結構ですので御指導よろしくお願いいたします。
    2009年5月7日 0:13
  • すみません。コードブロックの挿入欄に貼り付けたつもりでしたが。以下に再度、関係部分のみのコードを貼り付けます。宜しくお願いします。
    できればコード全体が見たいのですが可能ですか? 見られてまずい部分は適当な変数名などに変えていただいて結構です。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月7日 0:16
    モデレータ
  • それではコード全体を以下に貼り付けます。宜しく御指導ください。
    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        End Sub

        Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
            e.Graphics.DrawLine(Pens.Black, 20, 380, 20, 20)
            e.Graphics.DrawLine(Pens.Black, 20, 380, 620, 380)
            e.Graphics.DrawLine(Pens.Black, 120, 380, 120, 20)
            e.Graphics.DrawLine(Pens.Black, 220, 380, 220, 20)
            e.Graphics.DrawLine(Pens.Black, 320, 380, 320, 20)
            e.Graphics.DrawLine(Pens.Black, 420, 380, 420, 20)
            e.Graphics.DrawLine(Pens.Black, 520, 380, 520, 20)
            e.Graphics.DrawLine(Pens.Black, 620, 380, 620, 20)
            e.Graphics.DrawLine(Pens.Black, 20, 320, 620, 320)
            e.Graphics.DrawLine(Pens.Black, 20, 260, 620, 260)
            e.Graphics.DrawLine(Pens.Black, 20, 200, 620, 200)
            e.Graphics.DrawLine(Pens.Black, 20, 140, 620, 140)
            e.Graphics.DrawLine(Pens.Black, 20, 80, 620, 80)
            e.Graphics.DrawLine(Pens.Black, 20, 20, 620, 20)
            e.Graphics.DrawLine(Pens.Blue, 40, 40, 90, 40)
            e.Graphics.DrawLine(Pens.Green, 40, 55, 90, 55)
            e.Graphics.DrawLine(Pens.Magenta, 40, 70, 90, 70)
            ' Create a font object.
            Dim aFont As New System.Drawing.Font("Arial", 7, FontStyle.Bold)
            ' Display the text with the DrawString method.
            e.Graphics.DrawString("入側", aFont, Brushes.Black, 100, 35)
            e.Graphics.DrawString("中央", aFont, Brushes.Black, 100, 50)
            e.Graphics.DrawString("出側", aFont, Brushes.Black, 100, 65)
            e.Graphics.DrawString("600MPM", aFont, Brushes.Black, 0, 15)
            e.Graphics.DrawString("300", aFont, Brushes.Black, 10, 195)
            e.Graphics.DrawString("0", aFont, Brushes.Black, 10, 385)
            e.Graphics.DrawString("MIN", aFont, Brushes.Black, 630, 385)

            Dim XIS1 As Integer = 20
            Dim YIS1 As Integer = 380
            Dim XIS2 As Integer = 40
            Dim YIS2 As Integer = 230

     

            '入側速度
            e.Graphics.DrawLine(Pens.Blue, XIS1, YIS1, XIS2, YIS2)
            e.Graphics.DrawLine(Pens.Blue, 40, 230, 80, 230)
            e.Graphics.DrawLine(Pens.Blue, 80, 230, 120, 380)

            '入側ループ量
            e.Graphics.DrawLine(Pens.Blue, 20, 30, 100, 30)
            e.Graphics.DrawLine(Pens.Blue, 100, 30, 200, 380)
            e.Graphics.DrawLine(Pens.Blue, 200, 380, 300, 130)


            '中央速度
            e.Graphics.DrawLine(Pens.Green, 20, 180, 620, 180)

            '出側速度
            e.Graphics.DrawLine(Pens.Magenta, 20, 70, 90, 70)

            '出側ループ量
            e.Graphics.DrawLine(Pens.Magenta, 20, 70, 90, 70)
            e.Graphics.DrawLine(Pens.Magenta, 90, 70, 200, 380)
            e.Graphics.DrawLine(Pens.Magenta, 200, 380, 500, 380)
            e.Graphics.DrawLine(Pens.Magenta, 500, 380, 520, 200)

     


        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            MsgBox("THIM値は " & TextBox1.Text)
            Dim THIM As Single = CSng(TextBox1.Text)
        End Sub

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            MsgBox("WIDTH値は " & TextBox2.Text)
            Dim WIDTH As Single = CSng(TextBox2.Text)
        End Sub

    2009年5月7日 3:35
  • アクアと申します。どうぞ宜しくお願いします。
    trapemiyaさん、Azuleanさんのアドバイスがあるのにもかかわらず割り込んでしまい申し訳ありません。

    さて、すでに助言のあったTextBox2のプロパティが
     Enabled = True
     ReadOnly = False
    となっていて、TextBox2への入力が可能だったとします。
    その上で、こんなコードに差し替えてテストしてみるとどうでしょうか?

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim WIDTH As Single
        If TextBox2.Text.Length <> 0 Then
          Try
            WIDTH = CSng(TextBox2.Text)
            MessageBox.Show("WIDTH値は " & TextBox2.Text)
            ' MessageBox.Show("WIDTH値は " & WIDTH.ToString()) でも可
          Catch ex As Exception
            ' TextBox2に文字列が入力されている時に表示
            MessageBox.Show("数値を入力してください。" + vbCrLf + "文字はダメよ♪")
          End Try
        Else
       ' TextBox2に何も入力がされていない時に表示
          MessageBox.Show("何も入力されていません。")
        End If
      End Sub
    アクア@わんくま同盟
    2009年5月7日 8:13
  • それではコード全体を以下に貼り付けます。宜しく御指導ください。
    すみません。InitializeComponentもお願いします。VS2008の右上の辺りに(宣言)と表示されているコンボボックスがあると思いますが、そこから選択できます。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月7日 8:19
    モデレータ
  • trapemiyaさん、Azuleanさんのアドバイスがあるのにもかかわらず割り込んでしまい申し訳ありません。
    とんでもありません。それよりなかなか解決にもっていけなくて申し訳ないです。ご協力お願いいたします。

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月7日 8:21
    モデレータ
  • InitializeComponentを以下に貼り付けます。
    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Form1
        Inherits System.Windows.Forms.Form

        'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub

        'Windows フォーム デザイナで必要です。
        Private components As System.ComponentModel.IContainer

        'メモ: 以下のプロシージャは Windows フォーム デザイナで必要です。
        'Windows フォーム デザイナを使用して変更できます。 
        'コード エディタを使って変更しないでください。
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.TextBox1 = New System.Windows.Forms.TextBox
            Me.Label1 = New System.Windows.Forms.Label
            Me.Button1 = New System.Windows.Forms.Button
            Me.TextBox2 = New System.Windows.Forms.TextBox
            Me.Label2 = New System.Windows.Forms.Label
            Me.Button2 = New System.Windows.Forms.Button
            Me.TextBox3 = New System.Windows.Forms.TextBox
            Me.Label3 = New System.Windows.Forms.Label
            Me.Button3 = New System.Windows.Forms.Button
            Me.SuspendLayout()
            '
            'TextBox1
            '
            Me.TextBox1.Location = New System.Drawing.Point(28, 13)
            Me.TextBox1.Name = "TextBox1"
            Me.TextBox1.Size = New System.Drawing.Size(100, 19)
            Me.TextBox1.TabIndex = 0
            '
            'Label1
            '
            Me.Label1.AutoSize = True
            Me.Label1.Location = New System.Drawing.Point(36, 16)
            Me.Label1.Name = "Label1"
            Me.Label1.Size = New System.Drawing.Size(171, 12)
            Me.Label1.TabIndex = 1
            Me.Label1.Text = "Enter THIM and click the button."
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(28, 38)
            Me.Button1.Name = "Button1"
            Me.Button1.Size = New System.Drawing.Size(75, 23)
            Me.Button1.TabIndex = 2
            Me.Button1.Text = "Button1"
            Me.Button1.UseVisualStyleBackColor = True
            '
            'TextBox2
            '
            Me.TextBox2.Location = New System.Drawing.Point(28, 82)
            Me.TextBox2.Name = "TextBox2"
            Me.TextBox2.Size = New System.Drawing.Size(100, 19)
            Me.TextBox2.TabIndex = 3
            '
            'Label2
            '
            Me.Label2.AutoSize = True
            Me.Label2.Location = New System.Drawing.Point(26, 85)
            Me.Label2.Name = "Label2"
            Me.Label2.Size = New System.Drawing.Size(179, 12)
            Me.Label2.TabIndex = 4
            Me.Label2.Text = "Enter WIDTH and click the button."
            '
            'Button2
            '
            Me.Button2.Location = New System.Drawing.Point(28, 100)
            Me.Button2.Name = "Button2"
            Me.Button2.Size = New System.Drawing.Size(75, 23)
            Me.Button2.TabIndex = 5
            Me.Button2.Text = "Button2"
            Me.Button2.UseVisualStyleBackColor = True
            '
            'TextBox3
            '
            Me.TextBox3.Location = New System.Drawing.Point(28, 146)
            Me.TextBox3.Name = "TextBox3"
            Me.TextBox3.Size = New System.Drawing.Size(100, 19)
            Me.TextBox3.TabIndex = 6
            '
            'Label3
            '
            Me.Label3.AutoSize = True
            Me.Label3.Location = New System.Drawing.Point(26, 149)
            Me.Label3.Name = "Label3"
            Me.Label3.Size = New System.Drawing.Size(160, 12)
            Me.Label3.TabIndex = 7
            Me.Label3.Text = "Enter WT and click the button."
            '
            'Button3
            '
            Me.Button3.Location = New System.Drawing.Point(28, 164)
            Me.Button3.Name = "Button3"
            Me.Button3.Size = New System.Drawing.Size(75, 23)
            Me.Button3.TabIndex = 8
            Me.Button3.Text = "Button3"
            Me.Button3.UseVisualStyleBackColor = True
            '
            'Form1
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(284, 263)
            Me.Controls.Add(Me.Button3)
            Me.Controls.Add(Me.Label3)
            Me.Controls.Add(Me.TextBox3)
            Me.Controls.Add(Me.Button2)
            Me.Controls.Add(Me.Label2)
            Me.Controls.Add(Me.TextBox2)
            Me.Controls.Add(Me.Button1)
            Me.Controls.Add(Me.Label1)
            Me.Controls.Add(Me.TextBox1)
            Me.Name = "Form1"
            Me.Text = "Form1"
            Me.ResumeLayout(False)
            Me.PerformLayout()

        End Sub
        Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
        Friend WithEvents Label1 As System.Windows.Forms.Label
        Friend WithEvents Button1 As System.Windows.Forms.Button
        Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
        Friend WithEvents Label2 As System.Windows.Forms.Label
        Friend WithEvents Button2 As System.Windows.Forms.Button
        Friend WithEvents TextBox3 As System.Windows.Forms.TextBox
        Friend WithEvents Label3 As System.Windows.Forms.Label
        Friend WithEvents Button3 As System.Windows.Forms.Button

    End Class

    2009年5月7日 13:27
  • 皆様に御迷惑をかけて申し訳ありません。先ほど、FORM上でTexBoxと重ねていたLabelを少し、右のほうに移動させましたらTextBox2もカーソルで選択できるようになり、数値もキー入力でき、MsgBoxが出現し「Width値は****」と表示されるようになりました。エラーも出なくなりました。(TextBox2をクリックしていたつもりがLabel2をクリックしていたためTextBox2を選択できず、キー入力も無効となっていたものと考えますが?)お騒がせして申し訳ありませんでした。今後とも御指導宜しくお願いいたします。
    • 編集済み tyokogawa 2009年5月7日 13:57
    2009年5月7日 13:44
  • こんにちは。フォーラムオペレータの高橋 春樹です。

    handcraftさん、Azuleanさん、trapemiyaさん、アクアさん
    いつもお世話になってます。
    問題の切り分け方法のアドバイス、ありがとうございます。

    Azuleanさん
    スレッドのリンク情報先を貼り付けて頂き、ありがとうございます。

    スレ主さん(VisualVasic2008フォームボタン表示でのエラーさん)
    はじめまして。MSDNフォーラムの投稿ありがとうございます。

    問題が解決してよかったです(^-^)

    今回皆様に問題の切り分けアドバイスを頂いたので、
    勝手ながら有用なアドバイスに、回答マークを付けさせてもらいました。

    不適切な場合は、回答マークを削除することも可能なので、
    その時はよろしくお願いします。

    今後ともMSDNフォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    2009年5月18日 7:23