より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

C#

在在出在出、出は何文字?

C#

在出出在出出出出出出出出出出出出出出出出休出出 これ私の3月の出社・在宅状況なのですが、何日出社したっけと思いました。 スプレッドシートなので、COUNTIFを使えば一発でわかるものなんですが、指定の文字が何文字あるか? ってプログラムで書くと、どう…

Convert to method groupとは?

C#

C# のコードを書いていると、以下のようなコード支援が Convert to method group あー、なるほどね。と static void Main(string[] args) { var a = new List<int>() {1, 3, 4, 5}; var b = a.Select(i => IsOdd(i)).ToList(); } static bool IsOdd(int i) { retu</int>…

WPFのKeyDownでSpaceキーの判定ができない。PreviewKeyDownを用いる

C#

ListBoxのKeyDownイベントでSpaceキーを入力された時の判定をしようとしたのですが、出来ないようです。 なので、PreviewKeyDownイベントで行う必要があります。 Spaceキーのようなコントロールの操作に使う特別なキーについてはPreviewKeyDownで止まってし…

WPFのKeyDownイベントでKey.Systemとなってしまう場合は、e.SystemKeyで判定

C#

if ((modifiers & ModifierKeys.Alt) != ModifierKeys.None) { switch (e.Key) { case Key.Up: ShiftUpCommandToolStripMenuItem_Click(null, null); break; case Key.Down: ShiftDownCommandToolStripMenuItem_Click(null, null); break; } } 上記のような…

やっぱりAdd brace。中括弧つけませんか

C#

今の職場って、C#のコードを if (a==b) return; というのはまだしも if (a==b) return; とすることがあるようです。 個人的には一行でも if (a==b) { return; } と中括弧で囲って欲しいなぁと思ってました。 というのも中括弧で囲わない場合は、一行ならいい…

WPFのユーザーコントロール側からショートカットキーを設定する

C#

以下のようなOK/Cancelのコントロールを作成して各画面に配置していたのですが、OKといったらAlt+Oのショートカットキーでしょうと。 素直にXAMLでWindow.InputBindingsを指定して回るのも手間だなあということで、以下のようにしてみました。 public OkCanc…

WindowsFormsHost上にWPFのContextMenuを表示する

C#

WPFだけど、WinFormsが使いたい。 そういう時はあります。PictureBoxなんてImageより使い勝手がいいですし。 WinFormsなんだけど、コンテキストメニューはWPFのものを使いたいということはあります。 そうしないと古臭いUIが見え隠れしてしまうので <WindowsFormsHost> <WindowsFormsHost.ContextMenu> <ContextMenu x:Name="ContextMenu1" > <MenuItem Header="Menu item 1" /> <MenuItem Header="Menu item 2" /> </menuitem></menuitem></contextmenu></windowsformshost.contextmenu></windowsformshost>

WPFのImageでMouseLeftButtonDownイベントが反応しない

C#

ImageのMouseLeftButtonDownイベントが反応しないということがありました。 最初はImage Sourceがnullになっているので、それが関係しているかもなあ。 待てよ、他で実装した時は上手く言ったはず。 Gridで囲んでBackgroundを指定すると上手く機能しました。…

QuickConverterでIntegerをboolに変換する

C#

いちいちConverterクラスを作成しなくても、手軽にConverterの動きを行えるのがQuickConverterです。 github.com 毎回、ユースケースに合わせて Converterを作成してはキリがないので、このライブラリは優れ物ですね。 QuickConverterを使ったIntegerをbool…

MaterialDesignInXAMLのテーマの色をデフォルトの紫から変える方法

C#

MaterialDesignInXAMLはデフォルトの設定を利用すると紫になります。 この紫、濃いめでビビッドで、もう少し目に優しい色をと思ってしまいます。 そういう時、色を変えたい場合は、App.xamlの指定をPrimaryとAccentの色を変更します。 <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/materialdesigncolor.teal.xaml" /> </resourcedictionary>

ResharperのXAMLのCleanup Codeをする時にはXMLもチェックする

C#

ResharperでXAMLをCleanup Codeをする時にはXMLの設定も関係します。 www.jetbrains.com For XML-like languages (ASP.NET, XAML, and MSBuild), ReSharper uses XML code formatting preferences. ASP.NETやXAML,MSBuildなどXMLのような言語はXMLの設定も利…

Visual Studio2019でBinding Errorがわかりやすくなった

C#

Visual Studio 2019でWPFを開発していると、Binding Errorがわかりやすくなっていいですね。 2015の時は出力ウインドウにメッセージは出ていましたが、ColorOutputのアドオンを使っていないと見逃してしまっていたと思います。 ただ出力するだけではなく、重…

ReactivePropertyで複数の条件を満たす時に有効な ReactiveCommandを生成するとき

C#

var Command = A.Select(a => a == 1).ToReactiveCommand<bool>(); といった方法で、特定条件の時のみIsEnabledなReactiveCommandを生成できますが、複数のReactivePropertyが絡む場合はどうすればいいのか? CombinLatestを使えばいいようです。 var Command = A.</bool>…

WPFのUserControlに対してBindingする

C#

初歩的なことなのにど忘れしていたのがUserControlに対してBindingする方法。 例えば以下のようなUserControlがあったとします <Button Content="OK" Width="75" Margin="15 8 15 8" x:Name="ButtonOk"/> このButtonOkの Commandに対して親WindowからBindingしたい場合。 xaml.csでDependencyPropertyは以下のように追加 public stat</button>…

WPFでグラフを表示できるライブラリScottPlot

C#

WPFでグラフを表示できるライブラリないかなーと探してました。 前職ではSciChartという有償のライブラリを使ってましたが、フリーではないよなーと思いつつ検索しました。 すると、以下のライブラリに出会いました。 swharden.com ドキュメントも充実してい…

System.Xml.XmlDocumentのXPathは/で始めても始めなくてもいい

C#

レガシーコードを見ていたら、System.Xml.XmlDocumentのSelectSingleNodeの引数とするXPathで一箇所だけ/で始まっていない箇所がありました。 なくていいのかなと以下のようなコードを書いてみましたが、あってもなくてもいいみたいですね。 using System; u…

EncodingクラスにはUTF8のプロパティがある

C#

本当にちょっとしたことなのに忘れないようにメモ。 EncodingにはUTF8のプロパティがあります。 docs.microsoft.com なのに、私、Encoding.GetEncoding("UTF-8") として呼び出してました。 次からは、少しでも確実な方法を取るようにします。 using System.T…

System.Data.DataColumnの列名は条件的に大文字小文字を区別する

C#

レガシーコードを見ていたらDataTableのDataColumnなのですが、列名が大文字になったり、小文字になったりしている箇所がありました。 あれ、なんでこれ、動くんだ? 大文字と小文字区別しないわけなんてあるか? forums.asp.net どうやらDataTableのDataCol…

How to show MaterialDesignInXamlToolkit.PackIcon on Button

C#

You can get MaterialDesignInXamlToolkit though Nuget. And MaterialDesignInXamlToolkit have many icons as PackIcon. github.com So, you don't need to get icons on another webpages I memo how to show Pack Icon on Button because I don't know i…

WPFでスプラッシュスクリーンを表示する

C#

WinFormsではそのためのFormを用意してスプラッシュスクリーンを出しますが、WPFについては画像一つあれば簡単に設定できます。 docs.microsoft.com 画像をプロジェクトに追加し、プロパティからビルドアクションをSplashScreenに設定します。 ビルドアクシ…

WPF上でManaged DirectXを動かす

C#

昔作ったManagedDirectXのアプリケーションをWPFに移植したい。 Managed DirectXは、もう古の技術なのですが。 とはいえ、以下の記事を参考にさせていただきました。 blogs.wankuma.com WPFアプリケーションを作成します。 Managed DirectX関連のdllを参照に…

pdbファイルを出力しない設定、pdbファイルの中身を見てみる

C#

Releaseビルド時にはpdbを含めないようにというのは鉄則なのですが、よく忘れます。 設定方法 プロジェクトのプロパティ-ビルドを開き デバッグ情報を「なし」にしてOKです。 pdbなんてあってもいいんじゃない?なんでダメなの って、私は思ってました。 pdb…

WinFormsとWPFを共存させる

C#

WinFormsのプロジェクトを作成します。 参照を追加 System.Xamlを追加 WPFのウインドウの代わりにUserControlを追加 Windowが選べないのでUserControlで WPFは後で、.xaml、.xaml.cs共に継承元のUserControlをWindowに変更します。 WPFからWinFormsの呼び出…

InternalsVisibleToAttributeでinternalメソッドへのアクセスを可能にする

C#

結論から言うと、C#のInternalsVisibleToAttributeでは publicは従来通りにアクセス可能 internalへのアクセスが可能になる private,protectedはアクセス不可 通常、internal,private,protectedメソッドはアクセスできない。 using System.Runtime.CompilerS…

C#の大量のdllの差分をチェック

C#

仕事で本番環境とソースの差分を調査したいということで作業をしていました。 一つのソリューションで全てのプロジェクトを管理しているわけでもないので、まず全てをビルドするバッチの作成に取り掛かりました。 循環参照も含まれるため、バッチを何周もし…

線分の交差判定

C#

「Pythonゲームプログラミング 知っておきたい数学と物理の基本 」を読んでいたのですが、線分の交差判定の説明があり、こんな風に判定するんだと、驚きました。 最初見たとき、理解がついていかなかったのですが、似たような記事を読んでいくうちにわかって…

「Burikaigi2021」参加しました

C#

Burikaigiは北陸でやっている「ITに関することを勉強した後に富山のおいしいもの(鰤など)を食べる会」イベントです。 さすがに富山まで行って参加は難しいかなあと思っていたのですが、このご時世のおかげでオンラインの形で参加できました。 参加というか、…

Visual Studioのショートカットキー設定まとめ自分用メモ

C#

デフォルト設定とは別にカスタム設定するショートカットキーです。 スタートアッププロジェクトに設定 開発者用コマンドプロンプト Macとペアリング Resharper_AltEnter Resharper_GoToType

Math.NETで移動・拡大・回転の行列の合成を扱う

C#

以前、Vector3という便利なクラスが標準関数にあるという記事を投稿したのですが、行列についても同様なのかなと思ったのですが行列についてはなんともといったところです。 Matrix4x4クラスもありますが、私が扱いたい行列は4x4の行列同士の積ではなく、4x4…

タブと半角スペースが混在! レガシーC#コードのおともに

C#

ソースをコミットして、ふぅ〜と一息ついていたら、 タブと半角スペースが混在してませんか? というレビュー指摘がGitLabを通して挙がってきました。 ナニコレ〜!? GitLabを見ると、私の修正箇所だけインデントがズレています。 困ったことに、見ただけで…