PG日誌

受託系 PG が C# の事を書いています

c#

WPFのFluent.Ribbonでリボンプログラミング 第8回:アプリケーションメニュー、バックステージを表示する

今回は、前回作成済みのウインドウに対し、アプリケーションメニュー、バックステージを表示したいと思います。制御はさておきコントロールの説明になります。 アプリケーションメニューとは? Windows8以降を使用している方はエクスプローラを立ち上げたと…

外部プロセスの標準出力を非同期で取得する

c#

C#でprocessクラスを使って外部プロセスを起動したときに、プロセスが出力する標準出力と標準エラー出力を非同期で取得する方法のまとめです。

WPFのFluent.Ribbonでリボンプログラミング 第7回:ギャラリーを表示する

今回は、前回作成済みのウインドウに対し、ギャラリーを表示したいと思います。今回、ちょっと理解が及んでないところがありますがご容赦ください。 ギャラリーとは? 標準コントロールにはない概念なので、どういう概念なのか先ずは紹介したいと思います。…

WPFのTreeViewでSelectedItemをバインドする

WPFのTreeViewにあるSelectedItemは何故かバインドできません。業務アプリが大好物のTreeViewのSelectedItemがバインドできないと画面で選択要素が変化したときになかなかめんどくさい実装をしないといけません。そこで、SelectedItemがバインド可能なカスタ…

2017年にWPFでデスクトップアプリを新規作成する際に考慮すること

2017年4月現在、新規にWindows上で動作するクライアントアプリのベターな選択は何か?デスクトップアプリケーションを選んだ場合、作成する時に考慮しなくてはいけない事や、一番最初にやっておいた方がいい設定などを、業務アプリ屋目線で考察をしてみまし…

WPF の Fluent.Ribbon でリボンプログラミング 第6回:コンボボックス、スピナーを表示する

今回は作成済みウインドウに対し、コンボボックスの配置、スピナーの配置を行います。 コンボボックスの表示と定義 このコントロールは標準であるコンボボックスとほぼ同じです。プロパティの挙動もほぼ同じ複数選択肢の中から一つを選ぶためのコントロール…

WPF の Fluent.Ribbon でリボンプログラミング 第5回:クイックアクセスバー、ツールバーメニューを表示する

今回は作成済みウインドウに対し、クイックアクセスバーへのアイコン表示、ツールバーメニューへコントロールの配置を行います。

WPF の Fluent.Ribbon でリボンプログラミング 第4回:ツールチップ、コンテキストタブを表示する

前回までに作成したリボンウインドウへ、ツールチップ、コンテキストタブを追加します。

WPF の Fluent.Ribbon でリボンプログラミング 第3回:タブ、グループ、ボタンの配置

作成済みのリボンウィンドウへタブ、グループ、ボタンを配置していきます。 Fluent名前空間以下に配置されている以下コントロールを使用します。 リボンタブ:RibbonTabItem グループ:RibbonGroupBox ボタン 普通のボタン:Button ドロップダウンボタン:Dr…

WPF の Fluent.Ribbon でリボンプログラミング 第2回:導入方法とウインドウ表示

Fluent.Ribbon 導入方法は、NuGet からダウンロードで行うことができます。 まず、VisualStudio 上のメニューから、[ツール] > [NuGet パッケージマネージャー] > [パッケージマネージャーコンソール] を選択し、コンソールを表示します。 コンソールが表示…

WPF の Fluent.Ribbon でリボンプログラミング 第1回:構成要素の紹介

リボンUIですがマイクロソフトのリボンUIの方針というものが存在するのかは不明ですが、デザインのバリエーションは複数の実装があります。 Office2007スタイル Office2007製品 Windows7のペイントツール Office2010スタイル Office2013以降のスタイル Offic…

Fluent.Ribbon でリボンプログラミング連載一覧

標準のリボンがなんか微妙だったので、.NET(主にC#ですが) + WPF で利用できる、Fluent.Ribbon というリボンライブラリを調査してみました。発展途上のライブラリのためドキュメントの整備状況が少し微妙なのと、日本語での情報があまりなかったため、調査し…

【非推奨】WPFでリボンUIを使用する

MS Office製品でお世話になってるリボンUI(Microsoft.Windows.Controls.Ribbon)を最近の環境(VisaulStudio2017)で使用する方法です。 注意: タイトルの通り、標準ライブラリのリボンUIの利用は非推奨です。標準ライブラリ化されているにも関わらず、かなり…

C#でオブジェクトの内容をXMLへ書き出す、読み込む

c#

オブジェクトの内容を、XmlSerializerを使ってXMLへ読み(デシリアライズ)書き(シリアライズ)する方法のまとめです。単純な読み書き程度はクラスさえ用意すれば数行で読み書きができます。また、標準機能を使用するので特別な外部ライブラリは必要ありま…

C#でDictionaryから複数の要素を一括で削除する

c#

C#でDictionaryから同時に複数の条件を削除したい時にDictionaryに、そういった機能が無いため拡張メソッドを作成しました。

C#で同じ値の異なるEnumへの変換を行う

c#

C# である Enum から別の Enum の同じ値のメンバーへ変換を行う方法を説明します。 問題の確認 例えば、以下の2つの Enum が定義してあったときに、双方の “A” というメンバーは同じ値となっています。そこで public enum EnumSample_1 { A = 0, B, C, } pub…

WPFでログインウインドウを表示する

c#

WPF でメイン画面を表示する前に、自作のダイアログ(ログイン画面など)を表示するときの方法です。 App.xaml WPF のアプリケーションには Main メソッドが存在しません。そのためアプリで一番最初に呼ばれる AppMain.xaml の Application タグへ Startup …

C#でstringを一括でEmptyに初期化する(Refrection使用)

c#

例えば C# で string のプロパティが 100個あるクラスがあった場合、コンストラクタで1つ1つメンバーへ手で初期化を記述するは、大変手間な上に、初期化が漏れているなどのケースがあります。普通テストしたらそういう事にならないのですが、まれに NullRefe…

C#のSystem.Threading.Timerクラスの精度を確認する

C#のTimerクラスの定周期処理で、タイマーのインターバールを1msに設定した時の実際の実行間隔を確認した話です。

真・C# と WPF でインベーダー風ゲームを作る

3日前に『C# と WPF でインベーダー風ゲームを作る』を言って、雰囲気だけ似ているオリジナルのイカのシューティングの記事を書きましたが、「インベーダー」を名乗ってあの出来栄えはさすがに我田引水が過ぎるかなと思い反省したので、本物の「インベーダー…

C# と WPF でインベーダー風ゲームを作る

VisualStudio2017が出たということで記念するわけではないですが、C#とWPFのみでインベーダー風ゲームを作ってみたいと思います。 すいません、嘘つきました。インベーダーを意識した気がするオリジナルなシューティングゲームです。リスペクトしたというこ…

C# の List<T> の使い方

c#

C#で動的に要素を追加したり、削除したりしたいときに使う動的な配列「リスト」の使い方の簡単なメモです。

Disposeパターンを実装する

c#

Disposeパターンについて調べたので結果をまとめてみようと思います。 Disposeパターン コード例 基底クラスの実装 派生クラスの実装 利用側のコード 注意点 参考資料 Disposeパターン Disposeパターンですが、c#で基底クラスが アンマネージリソースを使用…

C#とC++間でchar*もしくはLPSZをやり取りする

C#からC++のDLLを呼び出すためにDllImportしたときにchar*が引数にある場合のやり取りの仕方です。 C++側はシグネチャを持つコードがあった場合 // C++側宣言 uint32_t __stdcall Function(char* szMessage); // もしくは uint32_t __stdcall Function(LPSTR…

C# で JSON をシリアライズ、デシリアライズする

c#

C# で JSON 形式のデータをシリアライズ・デシリアライズする方法のメモです。.NET Frameworkの標準ライブラリにあるDataContractJsonSerializer を使ってファイルやネットワークから読みとった JSON な文字列を C# のオブジェクトへ変換したり、オブジェク…

C#とWFでk-measn法のビジュアル化してみた

クラスタリングで定番のk-means, k-平均法をc#とWPFをつかって視覚化してみました。 今回は、以下2つのサイトに刺激を受けて作成しています。 play.google.com tech.nitoyon.com このアルゴリズムですがはだいたい以下のような手順で進みます。 データを座標…

C# の is 演算子と typeof の型判定の挙動の違い

c#

コード書けばすぐわかる事なんですが is 演算子の挙動の話です。is 演算子は複数の型で true になる可能性があります。 親子関係がある型で厳密に型を判定したい場合、GetType() と typeof を使います。 // こんなクラスがあったとして、、 public class Bas…

C# の event と delegate の違い

c#

マウスをクリックした場合などに発生する"イベント"の話ではなく、c#の予約語の"event構文"の話です。本当にざっくりとした先に結論を書くと、"event構文"は"delegate専用のプロパティ"の一種です。delegate型をクラス外に公開する場合だけ特別に、"プロパテ…

ObservableCollectionにAddRangeを追加する

c#

タイトルの通りなんですが、ObservableCollectionやIListにはAddRangeが無いんですよね。WPFでObservableCollectionの入れ替えを毎回foreachでやってたら憤死しそうにりました。けっこう前から結構不便に感じていたのでライブラリ作りました。こんな感じです…

c#のイベントのnullチェックがめんどくさい

c#

イベントってWPFとかだとたくさん呼ぶことがありますが、いちいちイベントにインスタンスが入っているかどうかを確認するとコードがnullチェックだらけになってしまいます。 普通こんな感じです。 // イベントの宣言 public event Action<object, EventArgs> HogeEvent; // イベ</object,>…

C# の const と static readonly の使い分け

c#

c#でプログラム書いてるとコードを書いているときは、constとreadonlyの区別ってあんまりありませんよね。ついつい定数は全部、constと書いてしまいます。 public static class HogeDefine { public const uint MaxLength = 10; public static uint DataSize…

VisualStudio2013へ.NET Framework4.6.1を導入する

ちょっと前に、VisualStudio2013へ.NET4.6の導入の仕方を書いたけど.NET4.6.1も同じような手順で導入できます。 4.6.2の導入の仕方 takachan.hatenablog.com 4.6の導入のしかた 前に書いた記事です。takachan.hatenablog.com http://blog.hatena.ne.jp/Takac…

C# でスレッド ID を取得する

c#

マルチスレッド処理中にログを出力したい時にスレッド番号があったらいいなと思ったので調べてみました。捕捉: GUIアプリのasync/await/Invokeが絡む画面操作関係でこの出力すると全部同じ値になってしまいます。UIがシングルスレッドアパートメントなので当…

コードのコメントはシンタックスじゃなくセマンティクスを書こう

コードの構造とか文法を一生懸命説明するシンタックスコメント職人が世の中に結構いるみたいです。例えばこんなの // ログを出力する Log.WriteLine("ERROR", "Failed to hogehoge function."); Log.WriteLine("ERROR", ex.ToString()); コード見ればわかる…

C#のvarとtry~catchはクソじゃなかった

c#

例外をcatch節で受けるときにException型で受けちゃうとコードインスペクションで引っ掛かります。で、ネットでどうなってるのか調べていたときにメッチャパッションしてるエントリを見つけたので思ったこと書こうと思います。C#のvarとtry~catchが糞すぎる…

WCFで通信エラーになる場合

c#

c#とWCFでプロセス間通信をするためにNetTcpBindingを使って通信を行っていたら以下のメッセージが出力され通信エラーとなりました。 System.ServiceModel.CommunicationException: ソケット接続が中止されました。これは、メッセージ処理時のエラー、リモー…

ガチャの確立をシミュレーションしてみた

グラブルが確率を偽って景品表示法に違反しているだとか、To LOVEるのガチャの確率が異様に低いとか世の中ソーシャルゲーム内に設置されれているガチャで騒ぎが起きているようです。その確率で、実際にどれくらいガチャを引けば当たるのか、少し気になります…

c#とJavaの微妙な違い

c#とJavaって基本的な構文は相当似てるんですが、やっぱり違う言語なので微妙に違います。両方を使い比べてみて、やっぱり全く違うんだな、と感じたことをいくつか書いてみようと思います。 アクセス修飾子 アクセス修飾時を省略したときの挙動 Javaの場合 c…

MahAppsのTreeViewをWPFで使ったときの話

MahAppsは、WPFでフォームやコントロールの見た目をユニバーサルアプリ風(旧メトロ風)に表示するためのUIライブラリです。 紹介はほかのサイトが詳しいと思いますが、コードがGitHubで公開されていて、紹介とドキュメントが以下のページに乗っています。http…

C# の static クラスとシングルトン考察

C# には言語固有機能として static クラスという機能があります。クラス自体を static と宣言することで、インスタンス作成を禁止し、static 宣言したクラスのインスタンスが複数作成できないようにします。ですがこの機能 GoF のデザインパターンのシングル…

VisualStudio2013へ.NET Framework4.6を導入する

c#

ちょっと前に、VisualStudio2013へ.NET4.5.2の導入の仕方を書いたけど.NET4.6も同じような手順で導入できます。 4.5.2の導入のしかた 前に書いた記事です。 takachan.hatenablog.com 背景的なもの .NET4.6はVisualStudio2015買ってね。的な事をMSさんおっし…

paizaで杏ちゃんにサンタコスさせてみた

そろそろクリスマスですね!彼女の杏ちゃんにもサンタクロースの恰好を要求してもいいんじゃないですかね?!水着、メガネを杏ちゃんにご着用頂いていましたが今回はサンタコスに挑戦してもらいます。水着回の記事 takachan.hatenablog.comめがね回の記事 ta…

paizaで杏ちゃんにめがねをプレゼントしてみた

昨日は杏ちゃんに水着を着てもらいましたが今日はめがねをプレゼントして様子を見たいと思います。Paizaのイベント paiza.jp水着回 takachan.hatenablog.comサンタコス回 takachan.hatenablog.com ショートカットに「めがね」きっと似合うと思います。ぐふふ…

C# のプロパティ構文のアクセス修飾子の指定

c#

本来プロパティは、setter/getterのシンタックスシュガーです。c#は(自動実装)プロパティが便利すぎてsetter/getterだという事を高頻度で忘れてしまうので改めて基本的な事を確認したいと思います。 まずはプロパティの書き方 まず、書き方のおさらいです。s…

c#固有の構文はUMLでどう書けばいいのか?

最終的な実装言語がc#と決まっていて、設計を検討していて、資料作成にUMLを使うと表現が少々難しい事あります。Javaのコンテキストには無いc#固有の文を扱う時にどうやって書けばいいのかわからない構文がいくつかあるので表現方法をどうするか考察します。

c#のIPAddressクラスでIPv4のフォーマット検証はできない話

c#

c#にはIPAddressクラスがあります。プリニティブ型と同様にParse, TryParseメソッドが用意されています。しかし、これをIPv4のフォーマットの検証に使うと思わぬ落とし穴にはまることになります。 文字列を4つの1バイト数値と3つのピリオドで成る文字列かど…

WCFの大容量通信でハマった話

c#

WCFでオブジェクトの数が多い(リストに10万件弱)を通信しようとしたところクライアント側で以下のメッセージが表示されました。 System.ServiceModel.CommunicationException: 基礎になる接続が閉じられました: 接続が予期せずに閉じられました ---> Syste…

c#とWPFでマンデルブロ集合を表示してみた

せっかく夏休みなのでc#とWPFでマンデルブロ集合を表示してみました。 ちなみに数学的な理解はそんなにしていませんので数式の意味とか方程式的な解説は他のサイトさんをご確認ください。ちなみに前回テトリスを作った時の記事はこちら。テトリスを c# と WP…

C# で現在のメモリ使用量を取得する

Environmentクラスで取得する プロセスが使用しているメモリ使用量を取得するには Environment クラスの WorkingSetProperty を参照すれば現在の使用量が取得できます。 long currentSet = Environment.WorkingSet Console.WriteLine("現在のメモリ使用量は{…

C# の Dictionary<TKey, TValue> の使い方

c#

c# で連想配列型のデータ構造を利用する場合 Dictionary を使います。割と使用頻度が高いですが安易な利用は後で痛い目に合います。そこで基本的な使い方と痛い目に合わないプラクティスをちょっと紹介したいと思います。 1. 宣言編/使用編 c# はこの手のサ…