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

VB2005 Express EditionにSP1を適用しています。
VBの勉強を始めて3ヶ月ほどになります。

以前に使っていたときは、デバッグ時に例外が発生すると、特に例外処理していない場合はイミディエイトウィンドウに例外のメッセージが表示され、プログラムがストップし、問題があったコードが黄色でマークされて表示されていました。

しかし最近PCをフォーマットして改めてVB2005を入れたところ、ほとんどの場合例外時にプログラムが止まらず、コードが黄色でマークされたりもしなくなってしまいました。ただ、イミディエイトウィンドウに、「'System.ArgumentOutOfRangeException' の初回例外が System.Windows.Forms.dll で発生しました。」などと表示されるだけです。どこで例外が発生したのかわかりにくくなって困っています。場合によってはちゃんとプログラムがとまることもありますが、違いなどもよくわからずにおります。

なにか事前の設定を忘れているのだと思うのですが、どこの設定を変えればよいのか教えてください。よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

「ツール」->「オプション」->「デバッグ」(「全ての設定を表示」にチェック)で、


「全般」の例外処理関係のチェックが外れているとかありませんか?

それか、「ツール」->「設定のインポートとエクスポート」で
「全ての設定をリセット」してみてはどうでしょうか?
(「設定をエクスポート」で現在の設定を保存してから行った方がいいかもしれません。)
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
ご返信遅くなりましてすみません。
そのあたりを確認しては見たのですが、どうも改善できませんでした。
とりあえず全ての関数にTry~Catch~を書いてエラーの出た場所だけ特定し、自力で対処することに致しました。
どうもありがとうございました。

お礼日時:2008/04/11 00:55

このQ&Aに関連する人気のQ&A

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

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

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

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

QVB.net 任意の例外を発生させるには・・・

いつも参考にさせていただいています。
現在以下の環境にてアプリ作成を行っております。

OS:Windows XP SP2
言語:VB.net 2005 SP1
.netFrameWork SDK ver2.0

質問:
現在作成中のアプリにて、特定のエラー(System.Net.WebException)をCatchし、その動作を3回までリトライ可能にするPG作成を行っております。
但し、3回を超えても同じエラーが返された場合はその特定のエラー(System.Net.WebException)を例外として発生させたいのですが、動的にこの例外を発生させる術が分かりません。

尚、Err.Raiseにて動的にエラーを発生できるようですが、
System.Net.WebExceptionを発生させる為の引数の数値が
分かりません。

以下、サンプルを記述します。

ご存知の方、宜しくお願いします。

dim RetryCount as Integer
Do While Not accessWeb(・・・)
RetryCount += 1
If RetryCount <= 3 Then
'ログ出力("WebAccess失敗の為、リトライします。(" & RetryCount & "/3回目)")
Else
'ログ出力("WebAccess失敗の為、異常終了。" )
※※※※※ここで例外(System.Net.WebException)を発生させアプリを終了させたい。※※※※※
End If
Loop


Private Function accessWeb(・・・) As Boolean

Try
例外(System.Net.WebException)が発生する可能性のある処理
Return True '正常終了時

Catch ex As System.Net.WebException
Return False '例外発生
End Try

いつも参考にさせていただいています。
現在以下の環境にてアプリ作成を行っております。

OS:Windows XP SP2
言語:VB.net 2005 SP1
.netFrameWork SDK ver2.0

質問:
現在作成中のアプリにて、特定のエラー(System.Net.WebException)をCatchし、その動作を3回までリトライ可能にするPG作成を行っております。
但し、3回を超えても同じエラーが返された場合はその特定のエラー(System.Net.WebException)を例外として発生させたいのですが、動的にこの例外を発生させる術が分かりません。

尚、Err.R...続きを読む

Aベストアンサー

自分で例外を発生させるのは「throw」ですね

ここら辺を読めばわかるとおもいますよ。

http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet15/vb6tonet15_03.html

参考URL:http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet15/vb6tonet15_03.html

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QTextBoxに半角数字のみの入力しかできないようにしたい

タイトルどおりです。
フォームに貼り付けた、TextBoxに、半角数字のみしか入力できないようにしたいです。
000000~999999までのコード(数字)を入力させるようにするわけですが、そのままだと半角英数も全角も入力できてしまいます。

GrapeCity社製のカスタムコントロール「InputMan」の“Number”を用いると簡単なのですが、これだとカーソルがボックス内の右端にきて、一の位から入力が始まってしまいます。
数字は、ボックス内の左側から入力されていくようにしたいのですが、“Number”だとなんか出来なさそう・・・?
(“Number”で左側から入力できるならそれがいいのですが)

そこで、TextBoxを使うことにしたのですが、TextBoxだと、半角数字のみしか入力できないような制限がかけるのかが、わかりません。

もし、お分かりの方がいらっしゃいましたら、ご教授下さいませ。

Aベストアンサー

コピペですみません。
VB6だと、

Private Sub TextBox_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyBack, Asc("0") To Asc("9"), Asc("-"), Asc(".")
Case &H1 ' Ctrl + A
TextBox.SelStart = 0
TextBox.SelLength = Len(TextBox.Text)
Case &H3 ' Ctrl + C
Case &H16 ' Ctrl + V
Case &H18 ' Ctrl + X
Case &H1A ' Ctrl + Z
Case Else
KeyAscii = 0
End Select
End Sub

で、いかがでしょうか。

コピペですみません。
VB6だと、

Private Sub TextBox_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case vbKeyBack, Asc("0") To Asc("9"), Asc("-"), Asc(".")
Case &H1 ' Ctrl + A
TextBox.SelStart = 0
TextBox.SelLength = Len(TextBox.Text)
Case &H3 ' Ctrl + C
Case &H16 ...続きを読む

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

QC#にて別クラスの関数を使いたい

C#にて、別クラスの関数を使用する方法を教えてほしいです。

下記のような、構造体を受け取るメソッドを作りました。

*****************************
private struct MyPoint
{
public int x;
public int y;
}

private void proc1(MyPoint pt)
{
MessageBox.Show("座標:" ; pt.x + "," + pt.y + "実行結果");
}

private void button1_Click(object sender ,System.EventArgs e)
{

MyPoint pt;
pt.x = 10;
pt.y = 20;
proc(pt);
}
*****************************

別のフォームのクラスから、proc1を呼び出したいのですが、やり方がわかりません。
どうか、教えてください。

Aベストアンサー

同じ定義をしたとしても別の名前空間に書いた構造体は同一とはみなされません。

呼び出し先クラスでの構造体を private では無く、public で宣言して下さい。

呼び出し元では、

MyClass.MyPoint pt;

のようにして実体を作ります。

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

QConsole.WriteLine で表示されない

VB2008でプログラムミングしておりますが、プログラミング試験の為によく使われる、「Console.WriteLine」ですが、表示されないのです。
何処に表示されるのでしょうか。
デバックを行っても何処にも表示されません。

Console.WriteLine("Hello World")
でも表示が何処にも有りません。

初歩的な質問ですが、私には大事な一歩なので宜しく御願い致します。

Aベストアンサー

質問者さんはもう見ていないかもしれませんが、一つ。
質問者さんはプロジェクトのタイプをFormにしているので、コンソールに表示されないのです。
プロジェクトのタイプをコンソールアプリケーションにすれば良く見られるDOS窓に表示されます。
Formアプリケーションタイプでも、確かプロジェクトのプロパティをいじればできたはずです。

Q初回例外

VB2010EE
7 pro SP1

フォームを作成して、「デバッグ開始」をすると、最初に
'System.InvalidCastException' の初回例外が Microsoft.VisualBasic.dll で発生しました。
'System.ArgumentException' の初回例外が System.Windows.Forms.dll で発生しました。
とメッセージが出ます。

その後実行していっても特に問題はなさそうなのですが、
この初回例外は何でしょうか?
無視していいものでしょうか?

Aベストアンサー

System.InvalidCastException

と出ているので、CASTに失敗しているのでないかと思います。

たとえば、テキストボックスに文字を入力し、その値を計算に使おうとすると発生します。


System.ArgumentException

メソッド使用時の引数エラー

引数に誤った型の引数を指定したか、NULLを渡したか。

Q「宛先ホストに到達できません」とは

下記サイトのみ「宛先ホストに到達できません」となります。
その他のサイト(goo等)は接続できます。(ping応答あり)

「宛先ホストに到達できません」とはどういう時に出るのでしょうか?

自宅にある他PCも同現象です。

<ネット接続構成>
インターネット-無線LAN(WZR-G144N)-PC

<ping結果>
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\xxxxx>ping sfp.kyoraku.jp

sfp.kyoraku.jp [1.1.81.114]に ping を送信しています 32 バイトのデータ:
192.168.11.1 からの応答: 宛先ホストに到達できません。
192.168.11.1 からの応答: 宛先ホストに到達できません。
192.168.11.1 からの応答: 宛先ホストに到達できません。
192.168.11.1 からの応答: 宛先ホストに到達できません。

1.1.81.114 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、

C:\Users\xxxxx>ping www.goo.ne.jp

www.goo.ne.jp [218.213.142.230]に ping を送信しています 32 バイトのデータ:
218.213.142.230 からの応答: バイト数 =32 時間 =67ms TTL=242
218.213.142.230 からの応答: バイト数 =32 時間 =66ms TTL=242
218.213.142.230 からの応答: バイト数 =32 時間 =66ms TTL=242
218.213.142.230 からの応答: バイト数 =32 時間 =56ms TTL=242

218.213.142.230 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 56ms、最大 = 67ms、平均 = 63ms

C:\Users\xxxxx>

下記サイトのみ「宛先ホストに到達できません」となります。
その他のサイト(goo等)は接続できます。(ping応答あり)

「宛先ホストに到達できません」とはどういう時に出るのでしょうか?

自宅にある他PCも同現象です。

<ネット接続構成>
インターネット-無線LAN(WZR-G144N)-PC

<ping結果>
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\xxxxx>ping sfp.kyoraku.jp

sfp.kyoraku.jp [1.1.81.114]に ping を送信しています 32 ...続きを読む

Aベストアンサー

状況からバッファローのルーターの問題であるような気がします。
ファームウェアのバージョンが低い場合は、アップデートで改善される「こと」もありますのでダメ元で試してみてはいかがでしょう?
あと、ルーターの経路情報や、ルーターにログインしてからpingテストをやってみて状況を確認してください。
ルーターからもpingが通らなければ(多分通らないと思いますが)、バッファローに問い合わせてみるのが解決への近道のような…。
他のルーターをお持ちでしたら、ルーターを変えてみるのもいいかもしれません。

QCOMコンポーネントって何?

よく、COMコンポーネントって聞くんですが、何のことかわかりません。VBやVBAのような言語名ではないことは、なんとなく分かるのですが・・・。できるだけわかりやすく教えてください。

Aベストアンサー

失礼ですが、クラスをご存知ないのであればCOMは多分
全く理解できないでしょうねぇ

クラスについても、ご自分で勉強が必要だとは思いますが
簡単に説明しておきます。
構造体(属性)に、関数(操作)を加え、カプセル化したものです。
従来のプログラミングでは、変数をばらばらに扱わず、
構造体と呼ばれる型に関係ある変数をまとめて、
プログラム中のデータ構造が明確になるようにしておきました。
そこで、この構造体に専属の関数を加えてしまえば、
その構造体は単独で自分の面倒をみることが出来るようになります。
それがクラスです。
その結果、プログラム中のデータや処理が、クラス単位で整理され、
それぞれ部品のように組み替えが可能になりました。

このように、クラス単位にプログラムを分割することで
巨大なプログラムを明瞭にする言語をオブジェクト指向言語といいます。

また、クラスには親と子があり、「継承」という考えを用いて
どんどんバージョンアップや特化を行うことが容易です。

VBで説明すると、
Dim value as A
として変数を宣言した場合、クラスは「A」です。
valueはオブジェクトや、インスタンスと呼ばれます。
valueを使って、Aに含まれる関数を呼び出して、valueを
操作することが出来ます。
value.Init()
等。

ざっくり説明するとこんな感じです。
詳細については、各言語の書籍を参照してください。

このようにして作ったクラスを、
・他の言語から使いたい
・ネットワーク経由で使いたい
などと言った機能を実現する、Microsoft提供の方法の一つが、
COMやDCOMと呼ばれるものです。
COMは、他のプログラムからの使いまわしに強いので、
一度作っておけば、VB、Delphiは勿論、VBScript、JavaScrips、WSHなどから
呼び出しが可能です。
また、COM自体のバージョンが上がっても、それを呼び出してる
プログラム自体には変更の必要がありません。

失礼ですが、クラスをご存知ないのであればCOMは多分
全く理解できないでしょうねぇ

クラスについても、ご自分で勉強が必要だとは思いますが
簡単に説明しておきます。
構造体(属性)に、関数(操作)を加え、カプセル化したものです。
従来のプログラミングでは、変数をばらばらに扱わず、
構造体と呼ばれる型に関係ある変数をまとめて、
プログラム中のデータ構造が明確になるようにしておきました。
そこで、この構造体に専属の関数を加えてしまえば、
その構造体は単独で自分の面倒をみることが出...続きを読む


人気Q&Aランキング