タグ

ブックマーク / dobon.net (25)

  • 捕捉されなかった例外がスローされたことを知る

    捕捉されなかった例外がスローされたことを知るここでは、Windowsフォームアプリケーションとコンソールアプリケーションにおいて、Try...Catch...で捕捉(キャッチ、ハンドル、トラップ)されなかった例外(エラー)がスローされたときに、その例外の情報を知るための方法を紹介します。 ただし、できるだけエラー処理はTry...Catch...(詳しくは、「エラー処理(例外処理)の基」)を使って行うべきであり、ここで紹介している方法はどうしてもそうしなければならない時のみ使用してください。 Application.ThreadExceptionイベントを使用する方法Windowsフォームアプリケーションでは、捕捉されなかった例外がスローされるとApplication.ThreadExceptionイベントが発生します。 ThreadExceptionイベントが発生するのは、Window

    捕捉されなかった例外がスローされたことを知る
    halohalolin
    halohalolin 2016/11/04
    Windowsアプリケーション開発において、補足しきれなかった例外に対してエラーレポートを送るようにするには、My.Application.UnhandledExceptionイベントを使えば良いらしい?
  • 「0で除算」の例外処理のスロー: DOBON.NETプログラミング掲示板過去ログ

    題名: 「0で除算」の例外処理のスロー 著者: マーシャリンガー 日時: 2005/07/07 12:51:53 ID: 11660 この記事の返信元: (なし) この記事への返信: [11661] Re[1]: 「0で除算」の例外処理のスロー はいこーん 2005/07/07 12:57:19 [11663] Re[1]: 「0で除算」の例外処理のスロー じゃんぬねっと 2005/07/07 13:05:18 [11668] Re[1]: 「0で除算」の例外処理のスロー 魔界の仮面弁士 2005/07/07 13:36:35 [11671] Re[1]: 「0で除算」の例外処理のスロー マーシャリンガー 2005/07/07 14:15:50 [解決] ツリーを表示 環境/言語:[XP/VB.NET/Framework1.1] 分類:[.NET] 以下のような計算式で「0で除算」を判断し

    halohalolin
    halohalolin 2013/07/23
    無限大かどうか調べるには、Double.IsInfinity(<<変数>>)を用いる
  • システムのアイコンを取得する

    システムのアイコンを取得するSystemIconsクラス(System.Drawing名前空間)のプロパティを参照することにより、Windowsのシステムのアイコン(既定のアプリケーションアイコン、エラーアイコン、疑問符アイコンなど)のIconオブジェクトを取得することができます。 次の例ではSystemIconsクラスから取得できる各アイコンを順番にPictureBox1に表示しています。 'Imports System.Drawing 'システムのアイコンを表示する '描画先とするImageオブジェクトを作成する Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height) 'ImageオブジェクトのGraphicsオブジェクトを作成する Dim g As Graphics = Graphics.FromImage(ca

    システムのアイコンを取得する
    halohalolin
    halohalolin 2013/06/28
    MessageBox等でシステムアイコンを設定するなら「SystemIcons」を用いる、例えばびっくりマーク(エクスクラメーション)を呼び出したいなら、SystemIcons.Exclamation
  • WebRequest、WebResponseクラスを使ってファイルをダウンロードし保存する

    WebRequest、WebResponseクラスを使ってファイルをダウンロードし保存する「WebRequest、WebResponseクラスを使ってファイルをダウンロードし表示する」では、指定されたURL(URI)からデータをダウンロードする方法を説明しています。また、ダウンロードしたデータをファイルに書き込む方法は、「バイト型配列をファイルに書き込む」が参考になります。 このような方法により、「http://localhost/logo.gif」をダウンロードして、ファイルに保存する例を以下に示します。 'ダウンロードするファイル Dim url As String = "http://localhost/logo.gif" '保存先のファイル名 Dim fileName As String = "C:\test\logo.gif" 'WebRequestを作成 Dim webreq

    WebRequest、WebResponseクラスを使ってファイルをダウンロードし保存する
    halohalolin
    halohalolin 2012/05/13
    WebRequest、WebResponseクラスを使ったインターネットからのロードについてReadByteメソッドで取り込むと遅い。Read、Writeメソッドの使用や、非同期処理を検討するべき。
  • 複数の配列(またはコレクション)をマージ(合併、連結、合体)する

    複数の配列(またはコレクション)をマージ(合併、連結、合体)するここでは、複数の配列やコレクションをくっつけて1つにする(マージする)方法を紹介します。例えば、{ 1, 2, 3 }と{ 4, 5, 6 }という配列をマージして、{ 1, 2, 3, 4, 5, 6 }という配列を作るということです。 AddRangeメソッドでコレクションのマージを行うコレクションの場合は、AddRangeメソッドで簡単に行うことができます。 AddRangeメソッドはマージするコレクションを末尾に追加しますが、InsertRangeメソッドを使えば、挿入する位置を指定することもできます。 以下に示す例では、AddRangeメソッドを使ってArrayListをマージしています。 'マージする2つのコレクション Dim list1 As New System.Collections.ArrayList(Ne

    複数の配列(またはコレクション)をマージ(合併、連結、合体)する
    halohalolin
    halohalolin 2012/05/12
    .Net Frameworkでは予め配列結合のためのメソッドが用意されているため、うっかり下手に自作しないようにしたい
  • 別スレッドからのフォーム操作中にフォームを閉じると: DOBON.NETプログラミング掲示板過去ログ

    題名: 別スレッドからのフォーム操作中にフォームを閉じると 著者: ナオーバ 日時: 2008/10/08 2:25:49 ID: 23157 この記事の返信元: (なし) この記事への返信: [23172] Re[1]: 別スレッドからのフォーム操作中にフォームを閉じると H.K.R. 2008/10/12 19:43:24 ツリーを表示 環境/言語:[Vista VS2005 C# .NET Framework2.0] 分類:[.NET] お世話になります。 早速ですが、別スレッドからのフォーム操作中にフォームを閉じると ObjectDisposedException例外が発生し、対策に悩んでおります。 毎回発生するわけではなくタイミングです。 状況 フォームに配置したWMPコンポーネントの再生中の時間を監視したいので、 System.Threading.TimerでWMPコンポーネン

    halohalolin
    halohalolin 2011/09/12
    フォームとは別スレッドからのフォームの操作を行う場合は、Invokeを用いるが、同時にクロージング中はInvokeを実行しないようにフラグ管理する必要がある。でないと連続で開閉しているとObjectDisposedExceptionの恐れが・・
  • IIf関数の代わりになるものは?

    IIf関数の代わりになるものは?C#でVBのIIf関数と同じ機能を持ったものが、?:三項演算子(条件演算子)です(というよりIIf関数がこれのまねでしょう)。 VBの

    IIf関数の代わりになるものは?
    halohalolin
    halohalolin 2011/05/28
    Visual Basic 2008からはIIf関数の代わりにIf演算子を使用して、s = If(i > 100, "Large", "Small")とした方が良い。falseの場合は、trueの内部が評価されないし、Option Strict Onの場合、iifと違って変換する必要がなさそう。
  • TraceやDebugのWriteメソッドでファイルに出力する

    TraceやDebugのWriteメソッドでファイルに出力するTraceクラスのWriteメソッド(または、WriteLine、WriteIf、WriteLineIfなどのメソッド)はデフォルトでは出力ウィンドウだけにメッセージを出力します。ここでは、これをファイルにも出力する方法を紹介します。 なお、後述しますが、ここで紹介している方法はDebugクラスのWriteメソッドでも有効です。 DefaultTraceListener.LogFileNameプロパティを使用する方法簡単な方法は、DefaultTraceListenerクラスのLogFileNameプロパティに出力ファイル名を指定する方法です。Trace.ListenersプロパティのコレクションにはデフォルトでDefaultTraceListenerオブジェクトが格納されているため(名前は"Default")、これを取得し、L

    TraceやDebugのWriteメソッドでファイルに出力する
    halohalolin
    halohalolin 2011/02/09
    DefaultTraceListener.LogFileNameプロパティを使用すればLogFileNameを設定してあげれば、DebugもしくはTrace.WriteLine("メッセージを出力")でログが書き込まれるようになる。VisualStudioが持ち込めない環境下でのデバッグに!
  • DOBON.NET .NET Tips - 実行ファイルのパスを取得する、VB6のApp.Pathと同じ事を行うには?

    '自分自身の実行ファイルのパスを取得する Dim appPath As String = _ System.Reflection.Assembly.GetExecutingAssembly().Location //自分自身の実行ファイルのパスを取得する string appPath = System.Reflection.Assembly.GetExecutingAssembly().Location; Assembly.GetExecutingAssemblyメソッドはDLL内で呼び出すと、そのDLLを表すAssemblyを返します。ですので、上記のコードをDLLで呼び出すと、appPathはDLLのパスになります。 CodeBase、EscapedCodeBaseプロパティで取得するAssembly.Locationプロパティの代わりにAssembly.CodeBaseプロパティやA

    DOBON.NET .NET Tips - 実行ファイルのパスを取得する、VB6のApp.Pathと同じ事を行うには?
    halohalolin
    halohalolin 2010/10/29
    System.Reflection.Assembly.GetExecutingAssembly.Locationで実行ファイルのフルパスを取得、System.IO.Path.GetDirectoryName()内に先の値を挿入すれば実行ファイルまでのパスが取得できる
  • WMIを使ってOSの情報を取得する

    WMIを使ってOSの情報を取得するWMIのWin32_OperatingSystemクラスを使用すれば、OSに関する様々な情報を取得できます。 WMIはWindows2000以上のOSで使用できます。(それ以外のOSでもインストールすれば使用できます。こちらからダウンロードできるようです。) 下の例ではSystem.Management.dllを参照設定に追加する必要があります。 Dim mc As New System.Management.ManagementClass("Win32_OperatingSystem") Dim moc As System.Management.ManagementObjectCollection = mc.GetInstances() Dim mo As System.Management.ManagementObject For Each mo In

    WMIを使ってOSの情報を取得する
    halohalolin
    halohalolin 2010/08/24
    System.Management.dllへアクセスすることでOSのシリアル番号を取得することが出来る。要:Windows Management Instrumentation(ただXP SP3ではWMIをインストールしなくても動いた)
  • 文字列処理を高速に行う

    文字列処理を高速に行う.NET Frameworkには文字列を表現するクラスとしてStringクラスがあります。Stringクラスを使うと、文字列の連結や置換、挿入などの処理を簡単に行うことができます。 Stringオブジェクトには、その内容を変更することができないという特徴があります。Stringオブジェクトを連結、置換、挿入する場合も実は、その度に新しいStringオブジェクトが作成されています。 これに対して内容を変更できる文字列を表現したクラスが、StringBuilderクラス(System.Text名前空間)です。StringBuilderオブジェクトに対して文字列の追加、置換、挿入を行うと、そのオブジェクトの内容が変更されるだけで、新しいオブジェクトを作成しません。そのため、同じ文字列に対してこれらの処理を複数回行う場合は、Stringクラスの代わりにStringBuilde

    文字列処理を高速に行う
    halohalolin
    halohalolin 2010/08/10
    StringよりもStringBuilderを利用する方が、文字列の連結・置換などの処理が圧倒的に高速
  • レジストリの操作: .NET Tips

    レジストリへの書き込み、読み込み、削除を行うここでは、レジストリから値を読み込む、レジストリに値を書き込む、レジストリの値やキーを削除する方法を紹介します。レジストリの操作全般は、RegistryKeyクラスを使って行うことができます。 レジストリに書き込むまずはじめにレジストリに書き込む例を示します。RegistryKey.CreateSubKeyメソッドでキーを開き、RegistryKey.SetValueメソッドで書き込みます。 次の例では、レジストリのキー"HKEY_CURRENT_USER\Software\test\sub"にデータを書き込んでいます。 'キー(HKEY_CURRENT_USER\Software\test\sub)を開く Dim regkey As Microsoft.Win32.RegistryKey = _ Microsoft.Win32.Registry

    レジストリの操作: .NET Tips
    halohalolin
    halohalolin 2010/05/18
    レジストリへの書き込み、読み込み、削除。レジストリの操作全般はRegistryKeyクラスを使って行う。HKEY_LOCAL_MACHINEへ書き込むとユーザ関係の無くソフトウェア統一の設定ができる。但し64bitOSでは、"SOFTWARE\Wow6432Node\~"。
  • ネットワーク、インターネットに接続しているか調べる

    'ネットワークに接続されているか調べる If System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable() Then Console.WriteLine("ネットワークに接続されています。") Else Console.WriteLine("ネットワークに接続されていません。") End If //ネットワークに接続されているか調べる if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) Console.WriteLine("ネットワークに接続されています。"); else Console.WriteLine("ネットワークに接続されていません。"); ヘルプによると、GetIsNetworkAvailableメソ

    ネットワーク、インターネットに接続しているか調べる
    halohalolin
    halohalolin 2010/04/26
    インターネットに繋がってるかどうかを高速で調べるには、NetworkInterface.GetIsNetworkAvailableを用いる
  • PictureBox上のLabelの背景が透明にならない問題の解決法

    PictureBox上のLabelの背景が透明にならない問題の解決法PictureBoxコントロールの上に配置したLabelコントロールはBackColorプロパティをTransparentにしても透明になったようには見えません。これはLabelコントロールの親コントロールがフォームであり、フォームにあわせてLabelコントロールの背景が設定されるためです。 よってこの問題を解決するには、Labelの親コントロールをPictureBoxにすればよい訳です。 次の例では、Label1という名前のLabelコントロールの親コントロールをPictureBox1という名前のPictureBoxコントロールとし、さらにLabel1の位置を調節しています。(Label1の位置を調節している部分はおまけです。Label1の位置が適当でないと、Label1がPictureBox1からはみ出して、表示されな

    PictureBox上のLabelの背景が透明にならない問題の解決法
    halohalolin
    halohalolin 2010/04/14
    Labelの親コントロールをPictureBoxにする/PictureBox1.Controls.Add(Label1)
  • 電源の状態(ACかDCか、充電中か、バッテリー残量など)を取得する

    電源の状態(ACかDCか、充電中か、バッテリー残量など)を取得するここでは、現在のシステムの電源状態(AC電源かDC電源か、充電中か、バッテリー残量はどの位かなど)を取得する方法を紹介します。 SystemInformation.PowerStatusプロパティを使用する方法SystemInformationクラス(System.Windows.Forms名前空間)のPowerStatusプロパティを使用すると、電源状態を簡単に取得できます。このプロパティは、.NET Framework 2.0以降で使用できます。 以下に示すコードでは、AC電源に接続されている(オンライン)か否(オフライン)か、バッテリーの残量、残り時間などの情報を表示しています。 'Imports System.Windows.Forms 'AC電源の状態 Dim pls As PowerLineStatus = Sy

    電源の状態(ACかDCか、充電中か、バッテリー残量など)を取得する
    halohalolin
    halohalolin 2010/03/30
    SystemEventsクラスのPowerModeChangedイベントにより、電源やバッテリーの状態が変化したことを知ることができます。例えば、AC電源からバッテリーへの移行、バッテリー電圧の低下などによりイベントが発生します。
  • ListBox(またはComboBox)に複数の項目をより速く追加する

    ListBox(またはComboBox)に複数の項目をより速く追加する通常、リストボックス(またはコンボボックス)に項目を追加するには、リストボックスコントロールのItems.Addメソッドで行います。複数項目を追加する時でも、For...Nextを使い、Items.Addメソッドにより一つ一つ追加していけばよいのですが、あまりに追加する項目の数が多いと処理にかなりの時間がかかります。 そのような時は、BeginUpdateメソッドを使用して項目追加時のリストボックスの再描画を禁止することにより、より速く複数の項目を追加することが出来るようになります。さらに、ちらつきもなくなります。 また、追加する項目が配列またはListBox.ObjectCollectionクラスの場合は、Items.AddRangeメソッドを使ってリストに追加するのがよいでしょう。 次の例では、リストボックスコントロ

    ListBox(またはComboBox)に複数の項目をより速く追加する
    halohalolin
    halohalolin 2010/03/23
    BeginUpdateメソッドを使用して項目追加時のリストボックスの再描画を禁止するか、Items.AddRangeメソッドを使ってリストに追加するのがよいでしょう。
  • SMTP認証でメールを送信する

    //MailMessageの作成 System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage( "from@xxx.xxx", "to@xxx.xxx", "題名", "文"); System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient(); //SMTPサーバーなどを設定する sc.Host = "localhost"; sc.Port = 25; sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network; //ユーザー名とパスワードを設定する sc.Credentials = new System.Net.NetworkCredential("user", "pass"); //

    SMTP認証でメールを送信する
    halohalolin
    halohalolin 2010/02/17
    SmtpClientクラスのCredentialsプロパティを使うことにより、ユーザー名とパスワードを指定してメールを送信することができます。
  • カスタム動作エディタの使い方

    セットアッププロジェクト(デプロイメントプロジェクト)のカスタム動作エディタを使って、作成するWindows Installerパッケージで使用するカスタムアクションを指定することができます。カスタムアクションとは、Windows Installerだけの機能では実現が難しい動作をEXE、DLL、スクリプト等を使って行うものです。 簡単な例早速ですが、まずはカスタムアクションがどのようなものか、簡単な例を見てみましょう。ここでは、VBScriptを使用することにします。 はじめにカスタムアクションで使用するスクリプトを作成します。ここでは次のようなごく簡単なスクリプトを作成し、"action.vbs"という名前で保存します。メッセージボックスを表示し、「こんにちは」と表示するだけのスクリプトです。 MsgBox "こんにちは" まずは、この"action.vbs"をセットアッププロジェクト

    カスタム動作エディタの使い方
    halohalolin
    halohalolin 2009/12/15
    VB2008の場合、カスタム動作「アンインストール」で実行するソフトは「ファイル システム」のアプリケーション フォルダ以外に含めないこと(無視される)/アンインストール実施後もProgram Files内のファイルは削除されない
  • 二重起動を禁止する

    二重起動を禁止するここでは、アプリケーションの二重起動を禁止する方法(アプリケーションが一つしか起動しないようにする方法)を説明します。なおここで紹介しているサンプルは、Windowsフォームアプリケーションを想定しています。 Mutexを使用する方法通常は、Mutexを使用する方法が一般的です。.NET FrameworkにはMutexクラスが用意されており、これを使用するのがよいでしょう。 Mutexクラスを使用して二重起動を禁止する例を、以下に示します。ここではエントリポイントで二重起動をチェックしています。エントリポイントが分からないという方は、「アプリケーションのエントリポイントを自作する」をご覧ください。 ''' <summary> ''' アプリケーションのメイン エントリ ポイントです。 ''' </summary> <STAThread> _ Shared Sub Mai

    二重起動を禁止する
    halohalolin
    halohalolin 2009/12/10
    VisualStudio2005以降は、プロジェクトのプロパティ→「アプリケーション」タブ→「アプリケーション...を有効にする」にチェック→「Windows...クプロパティ」の「単一インスタンス...作成する」にチェック
  • 特殊ディレクトリのパスを取得する

    特殊ディレクトリのパスを取得するEnvironmentクラスのGetFolderPathメソッドを使うと、デスクトップ、お気に入り、スタートメニュー、システムディレクトリなどなどの特殊ディレクトリの絶対パスを取得することができます。 使い方は簡単で、取得したいディレクトリを表すEnvironment.SpecialFolder列挙体の値を指定するだけです。 'デスクトップ Console.WriteLine( _ System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)) '結果: C:\Documents and Settings\UserName\デスクトップ 'お気に入り Console.WriteLine( _ System.Environment.GetFolderPath(Envir

    特殊ディレクトリのパスを取得する
    halohalolin
    halohalolin 2009/12/07
    Windows Vista以降はUACの制限で設定ファイルをProgram Files内に書きこむことができない。ですので ApplicationData内などを利用する必要がある。このページのパス名は、Vista以降は一部変更されているので注意