[C#]自前でToString()メソッドを実装時に気をつけるべき9つの事
C#では、ObjectクラスがToString()メソッドを持っているため、全てのオブジェクトがこのメソッドを継承しています。.NetFrameworkで用意されているクラスでは、ToString()をコールする事で有用な情報が帰ってくるのですが、自作のクラスではクラス名が分かる程度で役に立つ情報は有りません。 自前でToString()メソッドをオーバーライドしておくと、開発・デバッグが非常に捗りますが、そのときに注意すべき点が幾つかあります。 ToString() メソッド内で例外を発生させない また、オブジェクトの内部状態に情報がセットされていない場合でも、空文字列やnullを返さないよ…
続きを読む
[C#]Windowsで実行中のサービス一覧と、起動状態を取得する
.Net Frameworkを使用して、Windowsで稼働中のサービス一覧を取得するにはSystem.ServiceProcessパッケージのServiceControllerクラスを使用します。 下記のコードで、全サービス一覧の列挙と、サービスの起動状態を取得できます。 static void Main( string[] args ) { //——————— // サービス一覧を取得 //——————— System.ServiceProcess.ServiceController[…
続きを読む
[C#]WebBrowserコントロールを使用して、指定したサイト全体の画像を取得(DLL化しました)
WebBrowserコントロールを使用して、プログラムから指定したサイト全体の画像を取得します。 サンプルコードは、以下の通り。 using System; using System.Drawing; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Runtime.InteropServices.ComTypes; namespace SiteCaptureSharp { //*******************************************…
続きを読む
[C#]WebBrowserコントロール使用時、”Webページへのナビゲーションは取り消されました”エラーが出る時は?
WebBrowserコントロールを使用してNavigate()でサイトにアクセスした時、 “Webページへのナビゲーションは取り消されました”エラーが出る時があります。 その原因は多分…、指定したURLが間違ってます。 (例えば、http://www.yahoo.co.jp/ではなく、http://wwww.yahoo.co.jp/を指定したとか…) 初歩的なミスですが、気づかずにしばらく悩んでしまったので、備忘録としてのメモです。
続きを読む
[C#]現在のスレッドはシングル スレッド アパートメントでないため… エラーが出たときの対処法
コンソールアプリで、WinFormのコントロールを使用すると以下の例外が発生します。 System.Threading.ThreadStateException はハンドルされませんでした。 Message=現在のスレッドはシングル スレッド アパートメントでないため、ActiveX コントロール ‘xxxx’ をインスタンス化できません。 Source=System.Windows.Forms StackTrace: 場所 Program.Main(String[] args) 場所 Program.cs:行 33 場所 System.AppDomain._nExecuteAssembly(…
続きを読む
[C#]ファイルを削除した時に、ゴミ箱へ移動させる
C#(.Net Framework)のプログラムから、ファイルを削除したときゴミ箱に移動させる方法です。 C#では、System.IO.File.Delete()メソッドでファイルの削除を行う事が可能ですが、この方法ではファイルがゴミ箱に移動される事無く、いきなり削除されてしまいます。削除ではなくゴミ箱への移動を行いたい場合は、FileSystemクラスのDeleteFile()メソッドを使用します。 FileSystemクラスは、Microsoft.VisualBasic.FileIOパッケージに登録されているのですが、 標準では使用できないため、参照設定でSystem.Printing(M…
続きを読む
[C#]プリンタ一覧と、デフォルトプリンタを取得するには
C#(.Net Framework)のプログラムから、プリンタ一覧とデフォルトプリンタを取得する方法です。 .Net Frameworkでプリンタの情報を取得するには、System.Printingパッケージを使用します。 System.Printingパッケージは標準では使用できないため、以下のように、参照設定でSystem.Printingを追加する必要があります。 パッケージの追加を行ったら、以下のコードでシステムに登録されているプリンタ情報が取得できます private void button1_Click( object sender, EventArgs e ) &…
続きを読む
[C#]MemoryStreamに書き込んだ文字が、読み出し側で取得できないときにチェックする事。
WriteLine()で書き込んでも、フラッシュしないと読めない(場合がある)。 特に、長いデータを書き込んだとき、最後の方が一部だけ読めないときなどはこのパターン。 MemoryStream stream = new MemoryStream(); StreamWriter writer = new StreamWriter( stream ); writer.WriteLine("test"); writer.Flush(); // <= これが必要MemoryStream…
続きを読む
[C#] WinFormのプログラムからコンソール(標準出力)に文字を出力する
Windowsでは通常GUI(WinForm)のプログラムを作成した場合、通常ではコンソールへの文字出力を行う事ができません。コンソールアプリケーションでの文字列出力メソッドのSystem.Console.WriteLine()を試しに呼び出してみても、残念ながら何も出力されません。 ですが、プログラムのデバッグなど、コンソールに文字出力ができると便利なな場合も有ります。 このような場合、Win32 APIをコールする事で出力が可能です。 using System; using System.Windows.Forms; using System.Runtime.InteropS…
続きを読む
[C#]StreamWriterでファイルを排他オープンする方法
StreamWriterを使用してファイルを書き込む場合、通常以下のような感じでコーディングを行う。 using( StreamWriter writer = new StreamWriter( stream, Encoding.GetEncoding(932) ) ) { writer.Write( … ); }using( StreamWriter writer = new StreamWriter( stream, Encoding.GetEncoding(932) ) ) { writer.Writ…
続きを読む
[C#]DataGridViewから,指定した条件に合うデータをLINQで取得する
DataGridViewコントロールに表示されているデータから,指定した条件に一致する行をLINQを使って取得するサンプルです。 ちょっと長いですが、1行で取得可能です。 string keyValue = "key1"; // 検索条件 DataGridViewRowCollection rowList = null; try { rowList = DataGridView1.Rows.Cast<DataGridViewRow>().Select( row => row.Cells[ "…
続きを読む
[C#]dankogaiのAmazon APIを使用して、書籍情報を取得する
Dan Kogai氏が下記のページで公開しているamazonの書籍情報取得APIが有ります。 Ajax – AWS Caching Proxy w/ Authentication Support これを利用して、C#にて指定したASINの書籍情報を取得するサンプルです。 //********************************************************************* /// <summary> dan.co.jpのwebapiを使用してアマゾンの書籍情報を取得する /// /// </summary> /// &…
続きを読む
[C#]XmlDocumentから指定されたノードの情報をxpathで取得する
XmlDocumentから指定されたノードの情報(InnerText)をxpathで取得するメソッドです。 該当するノードが複数存在する場合は、最初のノードを取得します。 また、1つも存在しない場合は第三引数で指定された値を返します(これは,VCLのAnsiString::ToIntDefメソッド的な振る舞いです)。 //********************************************************************* /// <summary> XmlDocumentから指定されたノードの情報を取得する /// </summary&g…
続きを読む
[C#]指定されたURLの画像をImage型として取得する
.NetFrameworkに用意されているSystem.Drawing.Imageクラスは、FromFile()メソッドで画像データをファイルから読み込む事ができますが、Web上に存在する画像をURL指定で読み込ませる事はできません。 そこで、urlを指定してImage型データを取得するメソッドを作成しました。 //————————————————————————— /// <summary> /// 指定されたURLの画像をImage型オブジェクトとして取得する /// </…
続きを読む
[CrystalReports]データ長さに応じてフォントサイズを調整する
CrystalReportsを使用して帳票印刷を行う際、印字するテキストが長すぎてフィールドの枠内に入りきらない場合、印字が欠けてしまいます。 このような場合、Excelだったら「縮小して全体を表示」という書式設定をしておくと、印字内容のデータ長に合わせて自動でフォントサイズを縮小させる事ができるのですが、残念ながらCrystal Reportsには、これと同じ機能は有りません。 そこで、今回はCrystal Reportsで、印字するデータの長さに応じてフォントサイズを調整させる方法を説明します。 データ長に応じたフォントサイズを指定する 今回の例では、下記帳票レイアウト(.rptファイル)…
続きを読む
[C#,WebBrowser]ラジオボタンの選択肢から,指定した要素をC#でチェックさせる
WebBrowserコントロールに表示されたラジオボタンに対して、特定の項目を選択する方法です。 サンプルとして、以下のようなhtmlがあった場合に… <input type="radio" value="1" id="selId1">選択肢1</input> <input type="radio" value="2" id="selId2">選択肢2</input> <input type="rad…
続きを読む
[C#]WebBrowserコントロールで指定した位置に画面をスクロールさせる
下記のコードで、上から200pxの位置が画面の一番上になるようにスクロールされます。 横位置をずらしたい場合はPointの第一引数に値を指定します。 webBrowser1.Document.Window.ScrollTo( new Point(0,200) );webBrowser1.Document.Window.ScrollTo( new Point(0,200) );
続きを読む
[C#]Form_Load()イベントで、フォーカスをセットする方法
WinFormsを使用したプログラムで、指定したコントロールにフォーカスをセットするには、 通常ではSetFocus()メソッドを使用します。 button1.SetFocus();button1.SetFocus(); ですが、FormのLoadイベントでこの方法を使用しても、セットする事ができません。 これは、.NetFrameworkのイベントループ側で以下の処理を行っているためです。 1.親画面からForm.Show()メソッド(又はShowDialog)をコールする ↓ 2.子画面のOnLoad()イベントが指定されていたら、実行する ↓ 3.子画面に配置されているコ…
続きを読む
[VS2010]デバッグ時に.Net Frameworkのソースコードへステップインさせ、アセンブラのコードを表示させる
VisualStudioでWinFormを使用したプログラムを作成する場合、Form_Load()処理などのイベントハンドラを作成しハンドラ内に処理を記述していきます。 この際、Form_Load()の呼び出し元側は、.Net Frameworkのイベントループ処理となるのですが、この処理は呼び出し履歴ウィンドウで確認しても”外部コード”と表示されているだけで、どんなメソッドが呼び出されているか分かりません。 今回は、デバッグ時に”外部コード”の中身を表示させ、呼び元側にジャンプできるようにする方法を説明します。 これには、ステップインができるよ…
続きを読む
[C#]WebBrowserで,指定されたalt属性を持つタグを自動クリックする
WebBrowserコントロールを使用して特定のページを表示した後に、特定の画像をクリックした事にするコードです。 サイトによっては、imgタグを使用して、画像をボタン代わりに使っているので、そのような場合に便利です。 private bool clickTagByAltStartsWith( string tagName, string keyString ) { HtmlElementCollection tagList; IHTMLElement targetTag = null; // 検索対象のタグ(Microsoft HTML Object Library…
続きを読む