PG日誌

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

C#

ListBoxの要素上にカーソルが乗ったときの強調表示を停止する

WFPでListBoxを使用している際時に、マウスカーソルが子要素の上にMouseOverしたときに要素を強調表示するために青い枠が以下のように表示されます。 これを停止するためには以下のコードを記述します。デフォルトのスタイルを停止して自作の表示に切り替え…

Visual Studio 2017で単体テストもしくはTDDする

Visual Studio 2017でC#で開発してる開発者で、開発時にMSTestを使って単体テストを作成したり、コードを書くときにTDDしたりは、すっかり開発風景に定着していると思います。ただ、たまに作成方法を忘れるので、確認を兼ねてVisua Studio 2017 Community版…

WPFで自力でチャートを描画してみる

WPFで数万点のデータを高速にグラフに表示しようとすると、たいていのチャートライブラリで何十秒も描画に時間がかかって使い物にならないことが多いので、簡単にデータを見たいときに使用する簡易チャートライブライを作成してみました。 線グラフっぽいも…

.NET と.NET Coreで定義ファイルを読む

.NETのアプリケーションにはアプリケーション設定ファイルから定義を読み取る機能が付いています。自作の定義フォーマットを作成せずとも定義が読み込めたりします。 そこで、.NET Framework と.NET Coreの両方から読み取ってみようと思います。 .NET Framew…

WPF + C#でSetPixelする

はるか昔、WinFromの時代には、System.Drawing.Bitmapクラスがあってそのクラスには、1ドットごとに色を指定して絵を描くことができるSetPixel関数が付いていました。 WPFになって以降、クラス群が更に高級化したのでBitmapImageやImageSourceではそのような…

C#でTemplate Methodパターンを実装する

GoFのデザインパターンの中でも、振る舞いに関するパターンの1つであるTemplate MethodパターンをC#で実装したいと思います。 Template Methodパターンとは? Template Methodパターンとは、処理の手順を基底クラスで決めておいて、具体的な動作を後から派生…

中3の15%、短文も理解困難が話題なので解いてみた。C#で。

何か少し火種がくすぶっているようなので自分で解いてみました。 https://www.nasnem.xyz/entry/incorrect-comprehension-test http://mubou.seesaa.net/article/453754579.html 国語の問題らしく設問はこんな感じだそうです。 読解力テストの問題例(1) 以下…

MahAppsでマテリアルデザインっぽいボタンを実装する

WPFのオープンソースのGUIライブラリMahAppsを使ってマテリアルデザイン風のボタンをサクッと実装してみました。 作成環境 Windows10 VisualStudio2017 Update3 (15.3.5) .NET Framework 4.7 MahApps.Metro使用 FLATICONを利用 出来上がったもの 使った小技…

C#で汎用リトライ処理を実装する

C#

C#でリトライの共通処理を書いてみました。 特定の操作を指定した回数分自動でリトライしてくれる仕組みになります。 VisualStudio2017 + .NET4.7 + C#7.0で書いています。(Null条件演算子使ってるので、C#6.0以降なら動くかと) リトライのコード 戻り値なし…

C#でリストの特定の要素の位置を変更する

C#

あるリストに入ってる1つの要素の順序(位置)を変更します。 例えば、5番目の要素を3番目に移動したいなどの状況想定します。Listクラスを使いますがそういったメソッドは存在しないため追加で実装します。 実装例 Listクラスの拡張メソッドとして実装したい…

任意の値型をジェネリック(T)型にキャストする

C#

ジェネリックの型をintやboolにキャストして返却しようと思います。以下の例だと明らかに型が決まってるのですが、コンパイルはできません。 public T Convert<T>(string key) { string value = Config.GetValue(key); Type _t = typeof(T); if(_t == typeof(in</t>…

System.Threading.Semaphoreの使い方

C#

C#のセマフォの使い方です。 C#のセマフォは主に以下の2つのシーンで利用します。 同時に度に実行できるスレッドの数を制限したい 複数のスレッドの進行を同期したい 同時にXXXする数を制限したいという仕様があったときに効果を発揮します。大抵は、共有資…

C#のusingステートメントの機能

C#

IDisposabeleインターフェースを継承したクラスは、以下のように。usingを使用して以下のように記述すると using(var hoge = new Hoge()) { } 以下のように展開されたのとほぼ同じような形で処理が行われ、リソースが即座に解放されます。 Hoge hoge = null;…

C#の4つのTimerの用途と使い方

C#

C#というか.NETのタイマーの種類について整理と説明をしたいと思います。.NETには自分が知っている限り、現時点で4種類のタイマーがあります。 種類 アセンブリ 用途 System.Timers.Timer System 普通の定周期処理 System.Threading.Timer mscorlib 普通の定…

C#で行番号を取得する

C#

C#で行番号を取得する方法です。2種類あってそれぞれ以下の通りです。 using System; using System.Diagnostics; using System.Runtime.CompilerServices; static void Main(string[] args) { GetLine_1(); GetLine_2(); } // C#4.0(VS2010)までの書き方 pub…

C#/C++相互運用時の戻り値構造体にwchar_t[]が含まれると例外が出る問題

前回記事で、戻り値の構造体にNon-Bittable型(非Blittable型)が含まれる場合例外が発生する件でchar型の固定長配列は自分でマーシャルしないと例外が出るという話の続きです。前回と同じ条件(戻り値が非ポインタ型の構造体)でwchar_t型の固定長配列が含まれ…

相互運用時に戻り値にNon-Bittable型が含まれる場合例外が発生する件

タイトルの通りですが、C#からC/C++のDLL関数を呼び出すとき(相互運用時)にC++側の関数の"戻り値"が構造体でかつ、非ポインタ型で、その構造体のフィールドメンバーにNon-Bittable型(非Blittable型)が含まれている場合、以下の例外が発生して処理が落ちます…

C#とC++のbool型の扱い、条件分岐での使い方

自分へのメモ。 if文の括弧内の評価とbool値の関係を、C++を触るたびに検索してるので記録しておく。 どの言語でも共通のif文の定義 if文は評価結果が真の時に実行される if( $COND ) { // $CONDの評価結果が[真]の時に実行される } else { // $CONDの評価結…

C#とC++でラムダ式を利用、運搬性を確認する

C++11からC++でもラムダ式が使用できるようになったので、今更ですが使い勝手と、運搬性ををC#を比べてみました。ラムダ式を使用する方法と、変数に入れて持ち運ぶ方法の2とおりの使い方を確認しています。 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…