プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

C#

LibraryImportAttribute経由で取得したCOMオブジェクトのReleaseはほぼGC頼りになる

C#

2024/01/19 23時頃追記: ComObject.FinalReleaseの諸問題は.NET 9で解決されます: Make multiple calls to FinalRelease safe by jkoritzinsky · Pull Request #97059 · dotnet/runtime 2024/01/13 11時頃追記: レビュー時のコメントが守られていないのは流…

.NET 8からはLibraryImportAttributeで使うSafeHandle型のコンストラクタをpublicにしよう

C#

2023/12/02(土)追記: Breaking change: SafeHandle types must have public constructor - .NET | Microsoft Learnで本破壊的変更が明記されていました! 本記事のタイトルをより厳密に記述すると、「LibraryImportAttributeを使ったメソッドの戻り値やout引…

LibraryImportAttributeが.NET 7で追加されたので触ってみました

C#

.NET 7で追加されたLibraryImportAttributeや関連する機能の概要、生成されるコード、試行錯誤した点、サンプル等の備忘録記事です。 本記事の内容は、Microsoft Visual Studio Community 2022 (64-bit) - Current Version 17.4.3と.NET SDK Version 7.0.101…

NotifyIconのContextMenuStripをメインディスプレイ限定で表示させたい

C#

(21:30頃: 対応後のコードにて使用していたScreen.PrimaryScreen.BoundsをScreen.FromPoint(point).Boundsに変更) NotifyIconにContextMenuStrip(=右クリック時のポップアップメニュー)を設定して表示する通常の方法だと、メインディスプレイのタスクバー表…

Utf8JsonWriterがエスケープする文字を自作JavaScriptEncoderで減らしたい

C#

.NET Core 3.0にてUtf8JsonWriterが追加されました。 Json.NETでjson書き出しをしている箇所をUtf8JsonWriterに変えようとしたら、Utf8JsonWriterの文字列書き出しでハマったので紹介します。

WPFのメニューとアクセスキーとIME状態

メニュー関連の前の記事: WPFでのメニューとキーボード操作時のフォーカス移動の話この記事ではContextMenuについてだけ記述していますが、Menuでも同様の現象が発生しますし同様の方法で対処可能です。

C#のリリースビルドのEXE中から.pdbのフルパスを除外する設定

確認環境: Visual Studio Community 2015(バージョン: 14.0.23107.156)アプリケーションを書き、リリースビルドを行い、ふと生成されたEXEファイルをバイナリエディタで開いて検索してみると.pdbのフルパスが含まれているではありませんか。 フルパスである…

VisualStudioのコード分析で識別子のタイプミスなどを検出する

2015/11/24 23:00頃 それなりに追記修正 2015/11/25 22:00頃 細々と追記修正 確認環境: Visual Studio 2015 Community Version 14.0.23107.0 D14RELC#プロジェクトで、全てのルールを使ってコード分析したときのメモです。 c# - Visual Studio Code Analysis…

WPFでのメニューとキーボード操作時のフォーカス移動の話

メニュー関連の次の記事: WPFのメニューとアクセスキーとIME状態この記事の参考元: WPF menu tab navigation - Stack Overflow

WPFのListBoxでマウスドラッグ中の要素選択を無効にする方法

確認時の.NET Frameworkのバージョン: 4.6.00081 参考元: Disable ListBox Dragging Selection in Single SelectionMode?2015/11/03追記: ListBox Class の派生である ListView Class の場合でも、同様の方法で対策可能です。

C#でJSONを読み込む方法によっては末尾コンマでも読める話

C#

確認時の.NET Frameworkのバージョン: 4.6.00081.NET標準のメソッドでJSONを読み込もうとした時、「末尾がコンマで終わる配列」「末尾がコンマで終わるオブジェクト」というJSON textではないものを、方法によっては読める、という記事です(長い)。 ("traili…

WPFのControlTemplateとDataTemplateの違い、それとContentPresenter

2016/05/14: ContentTemplateを使用した場合とContentとして直接記述した場合のDataContextの違いを追記この記事では「コントロールとは何か」「データとは何か」については一切触れません。 代わりにVisual Treeに基づいて記述します。この記事で「子要素」…

Live Shapingを使ってコレクション要素を自動フィルタリングする例

19:00頃: 「一度に大量の要素を変更した場合の性能」を追記.NET Framework 4.5で ICollectionViewLiveShaping Interface が追加されました。このインターフェースを通じて、コレクション要素のグループ化/ソート/フィルタリングをリアルタイムに行えます。 …

TargetedTriggerActionの使用例

2015/09/22 xamlのサンプルをGridView(Header)RowPresenterを使用するものに変更、説明を追加。System.Windows.Interactivity.TargetedTriggerAction をWPFで使用するメモです。 確認時のExpression Blend SDKのDLLのバージョン System.Windows.Interactivit…

xamlでStaticResourceの結果にTypeConverterを適用する方法

2015/09/20 追記: 背景の説明に、xamlでの属性値の処理についての説明を追加 背景 MenuItem.InputGestureText と KeyBinding.Gesture に同じ文字列を二回記述したくない x:StaticにしてもStaticResourceにしてもマークアップ拡張を通す場合は、 XAML Syntax …

Visual Studio 2013から2015への乗り換えメモ

去る7/20にVS2015のRTMが公開されたので2013から移行した時のメモ書き記事です。Editionは2013・2015共にCommunity。

Recyclingを指定したWPFのTreeViewでShowLinesな表示にする

Recycling指定でも正常に動作する版の、完全なサンプルコードは最後に載せています。 確認環境 Visual Studio: Community 2013 プロジェクトの対象のフレームワーク: .NET Framework 4.5 PCにインストールしているフレームワーク: .NET Framework 4.5.51209 …

Directory.EnumerateFilesでハマった話

C#

指定ディレクトリ以下の指定拡張子の列挙に便利な System.IO.Directory.EnumerateFiles メソッド。 しかし、searchPattern引数に指定していない拡張子も列挙される場合があります。2015/11/10追記: MSDN日本語版に改めてアクセスしてみると、解説中の「メモ…

Livetでウィンドウが閉じられるときに確認ダイアログを出し、その応答で別の処理をしたりキャンセルしたりする方法

サンプルコードは最後に載せています。 2015/05/17 サンプルコードをコールバックを使用しない内容に差し替え。 確認環境 Visual Studio: Community 2013 Livet: 1.2.0 プロジェクトの対象のフレームワーク: .NET Framework 4.5 PCにインストールしているフ…

読み取り不可なStreamの作り方

C#

背景 某ファイルフォーマット用のBinaryReaderクラスを作った。 コンストラクタで受けるStreamがunreadableならArgumentExceptionを投げている。 これの単体テストを書きたい。 実現方法 Stream.CanRead プロパティ (System.IO) | Microsoft LearnはClose後…

TreeViewのControlTemplateにScrollViewerを入れたらUIの仮想化が動かなかった話とその対処法

2015/04/13追記 Win7 64bitマシンで、プロジェクトの対象のフレームワークを.Net4.5として、マシンには.Net4.5.2をインストールした状態で、仮想化したTreeViewの要素をExpandしたときにスクロール位置が狂う(Expandした要素やその子供が範囲外に隠れる)現象…