自分用.Net10メモ
Form関係
- FormクラスのOnClosed(EventArgs), OnClosing(EventArgs) 廃止
OnFormClosed(FormClosingEventArgs), OnFormClosing(FormClosingEventArgs)に変更
随時更新
AdpcmEncode.exeはどこへいったのか。
ずっとローカルにあって使いまわしたけど、ふと使おうとしたらVC2010ランタイムを要求された。
えっ、2010!?
ということで最新を探すことにした。
マウス右ボタンドラッグ&ドロップ時コンテキストメニューを求めて
IContextMenu::QueryContextMenu (shobjidl_core.h) - Win32 apps | Microsoft Learn
SHCreateDefaultContextMenu 関数 (shlobj_core.h) - Win32 apps | Microsoft Learn
この2つを中心に色々と調査、試行錯誤、Github Copilot Proと会話しましたけどね。
いや~、だめだね。
対象のフォルダ自体、またはドラッグ元ファイルのシェルコンテキストメニューかしかでない。
まぁ、どうせフォルダ対象時に「ここにコピー」「ここに移動」「ショートカットをここに作成」(セパレータ)「キャンセル」。
アプリケーション対象時に「プログラムから開く」(セパレータ)「キャンセル」
さえあればいいだろう。
エクスプローラー上でやれば7zipとCRC SHAってメニューあるけど。
でもせめてこの項目名取れないかな……。一応リソースを英語と日本語にしてるから、日本語固定なのはよろしくないし、ここだけ固定名のバレるのもなんだかなあ。
オープンソースのC++で書かれたファイラでこのあたりやってるやつないかなあ……。
任意パスの集合からのIShellItemListはITEMIDLIST経由しないとできない?
任意のファイルパスの配列からIShellItemArrayを作成したかった。
無事、IShellItemArrayができたのはいいけど、ITEMIDLISTを経由しない方法だと最後の最後にコケる。
なんとかIShellItemの集まりからの作成にできないだろうか。。
Formデザイナがクラッシュする問題のほかでは見つからなかった原因
Visual StudioでWindows Formsアプリを開発時、Formデザイナが様々な原因でクラッシュすることがこれまでもあった。
かつてはそもそもVisual Studioが32bitの時代(2019までか?)はx64だと駄目だったり。
そもそもVisual Studioの細かいバージョンのバグが原因だったり。
今回はそういう原因ではなかった。
リソースファイルに言語リソースが付随するとき。
つまり。
Resource.resxに対してResource.ja-JP.resxなどがあるとき。
リソース(アイコン)のja-JPの方を空っぽのままにしていたのが悪かったらしい。
でもそのアイコンフォームで使ってないんだけどなあ……。
あと、もうちょっと、具体的なエラー示してくれてもいいと思うんだよね。
object instance がnullとか、依存関係が0?とかそんなログ表示ではわからん。
なんにせよ治ってよかった。
同じ失敗をしてしまった方の目に止まりますように。
.Net Windows.Forms ListView利用メモ
自分用メモ
OwnerDraw時に項目単位で通常描画を行う
これでいい。
e.DrawDefault = true; base.OnDrawItem(e);
OwnerDraw+Details時はカラムヘッダとサブアイテムに注意
こいつらもOwnerDrawになる。
通常で良ければそれぞれのOwnerDraw Eventを上記の方法で処理する。
//列ヘッダ
protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
base.OnDrawColumnHeader(e);
}
//サブアイテム
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e)
{
e.DrawDefault = true;
base.OnDrawColumnHeader(e);
}