パネルからコントロールを正しく削除する方法

動的にコントロールの追加と削除を繰り返していたら、「ウィンドウのハンドルを作成中にエラーが発生しました。」という例外が発生した。

削除は以下のように書いていた。

panel1.Controls.Clear();

コントロールのハンドルを解放するには以下のように書くべき。

for(int i = panel1.Controls.Count - 1; 0 <= i; i--) {
panel1.Controls[i].Dispose();
}

※後ろから解放している点が重要らしい。

オラクルDBサーバに接続時Timeoutエラーの解決

C:>sqlplus mie_user/imspass@192.168.0.12:1521
以下のエラーが表示されました。
ORA-12170: TNS:Connect timeout occurred

原因:
オラクルDBサーバのファイアウォールが有効になってポート1521が遮断されたからでした。

解決方法:
オラクルDBサーバのファイヤーウォールを無効にしました。(一時対応)

フォントサイズをポイントからピクセルに変更

Form_Paint或いはPanelコントロールの~_Paintメソッドの中に、PaintEventArgs型のパラメータeからディスプレイのDPIを取得できる。
横方向のDPI : e.Graphics.DpiX
縦方向のDPI : e.Graphics.DpiY

例えば、1920*1080のディスプレイを100%に設定した場合は96で、125%設定の場合は120となる。(DpiXとDpiXが同じの場合がほとんど)

① 縦方向のDPIを取得して保存しておく。

  Utility.DpiY = e.Graphics.DpiY

② 幾何変換のための3×3擬似空間行列クラスのインスタンスを作る。

  System.Drawing.Drawing2D.Matrix m = CurrentDicomImage.Matrix(CurrentDicomViewer);

③ フォントサイズをポイント単位からピクセル単位に変換する。

  short FontSizeInPixel = (short)(FontSizeInPoint / 72.0 * Utility.DpiY / DicomGlobal.Zoom(m));

※1Pointは1/72Inchと相当する。

※上記はDicomImage空間の数値を得る。

IISでのFTPバインド設定について

IISFTPのバインド設置でIPアドレスを「*」に設定すると、localhost, 127.0.0.1, 192.168.0.xxxのどれでもftpでログインできる。

逆に「192.168.0.123」だけバインドすると、このIPだけftpできるようになる。

DicomObjects_ビューア内画像位置座標値取得

ビューア内、画像表示レイアウトがm×n関係なく、以下方法で現在選択中画像の開始位置の座標値を取得できる。

m_SelectedImage.CellLocation(curViewer)