asと()キャストの正しい使い分け方法

C#

asキャストとは asと()キャストの違い 違い①:キャスト失敗時のふるまい 違い②:キャストできる対象のオブジェクト 正しい使い分け方法 asキャストとは C#ではCやC++にはなかったas演算子を使ってキャストをする機能が追加された。 使い方としてはキャストし…

SMB2.0が原因で共有フォルダアクセスが遅い場合の対処法

Windows10ではSMB2.0というファイル転送プロトコルが使われている。 このSMB2.0だがネットワークの負荷を軽減させるためにクライアント側にキャッシュを持たせる機能が入っており、共有フォルダへのアクセスが遅くなる場合がある。デフォルトは10s毎にサーバ…

Roundメソッドを使った正しい四捨五入の実装方法

C#

C#の標準クラスではMath.Roundという数値の四捨五入に使えるメソッドがある。 docs.microsoft.comこのMath.Roundメソッドだがそのまま何も考えずに四捨五入で使うと問題が起きる。 例えば以下のようなケース。 Console.WriteLine(Math.Round(1.5)); Console.…

Enumの要素数を1行で取得する方法

C#

実装時にEnumの要素数を使って何かをしたいケースがよくある。 Enum自体は配列等ではないので、そのままでは要素数にあたるメソッド等は持っていない。 でも1行でカンタンに要素数取得する方法がある。例えばこんなenumの要素数を取得する場合 public enum …

DataGridViewTextBoxにテキストと画像を表示させる方法

C#

DataGridViewTextBoxはテキストだけ表示するのが普通だが、セル内にテキストに加えて画像も一緒に描画したりすることができる。 DataGridViewのCellPaintingイベントで自力描画させれば割とカンタン。 セルを選択時は晴れ、非選択時は曇り画像を表示させるよ…

DataGridViewComboBoxCellを1クリックでドロップダウンさせる方法

C#

DataGridViewの実装でDataGridViewComboBoxCellを使うことがたまにある。 このコンボボックスは普通のSystem.Windows.FormsのComboBoxと仕様が違い、デフォルトだと1クリックではリストがドロップダウンしてくれないのだ。 ドロップダウンしない2回クリッ…

数字以外が入力で色が変わるTextBoxの実装方法

C#

テキストボックスに指定した文字(数字等)が入力されたら背景色を変えて、ユーザーにルール違反していることを通知したいことがある。 テキストボックスのイベントに少し処理追加すればカンタンに実装することができる。 public partial class Form1 : Form…

高DPIにWindowsフォームアプリケーションを対応させる方法

C#

何も考えずにWindowsフォームアプリケーションを作り高DPIのPC上で起動するとこんな感じにボヤけた表示になる。 高DPI未対応これはアプリケーションが高DPI環境に対応できていないためだ。 ボヤけたままの表示はダサいし、文字が見えにくいので対応したいと…

正しいDisposeの実装方法

C#

C#でクラスのリソース開放をする時、普通はDisposeメソッドを実装する。 このDisposeだがあまりC#詳しくない人だとてきとうに実装してしまいがち。 こんな感じ。↓ // ダメなDisposeの実装方法 internal class MySampleClass { private SqlConnection _connec…

C#でWindows資格情報に登録されているか確認する方法

C#

業務でWindows資格情報を読む機能を実装したことがあったので備忘録として残す。WindowsAPIのCredRead関数をC#から呼び出すことで実装可能。 サンプルコードは以下。 [DllImport("Advapi32.dll", EntryPoint = "CredReadW", CharSet = CharSet.Unicode, SetL…