ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

PowerShellでWPFとかイベントとか ~ 枠組みをC#で書く ~

この頃、ブログの更新がおろそかでしたが、ネタはあったのです。

今回は大したものではないですが、この前書いた記事「PowerShellで.NETのウィンドウを生成する」の続編的な内容を綴りたいと思います。

そのため、あちらの記事を読んでからこちらを読むこと推奨です。

最近、昔の記事と同じネタを使いまわすばっかりで、やっぱりネタないんだろとか言ってはいけない。



上記リンクの記事では、ウィンドウの生成と表示までをメインに書いてあり、
ボタンを押したら〇〇するみたいなイベントハンドラというかロジックの部分はかなり適当でした。


一応、前にイベントハンドラについて言及したことをまとめましょう。

XAMLでたとえば、Windowの要素としてButtonがあるというときに、PowerShell上でButton.Clickイベントのハンドラを書きたいなというときは、

まず、PowerShellでButtonのインスタンスを取得できるようにするため、XAMLのほうでButton要素に適当なx:Name属性を設定しておきます。

そして、Windowのインスタンスはすでに例のXamlReader.Parseメソッドから取得できているので、
そのWindowのFindNameメソッドにButtonのx:Nameを与えればインスタンスを探して返してくれます。


そして、そのインスタンスのメンバに、PowerShell専用の普段は使えないメソッドですが、Add_(イベント名)というメソッドがあるので、それを呼びます。

引数に { ... } と書くスクリプトブロックを与えれば、たとえばAdd_Clickを呼んだなら、そのあとボタンがクリックされたときにスクリプトブロックが呼ばれるということになります。

ちなみにAdd_(イベント名)じゃなくて、Register-ObjectEventというコマンドレットでもPowerShell的なスタイルでイベントハンドラを登録できるのですが、
これは厳密にいうとイベントハンドラとはちょっと違うPowerShellのジョブというものであるようで、実験してみたところおそらくジョブを扱うスレッドはGUIスレッドと違うという問題で上手いことハンドラが呼ばれませんでした。



このように、
1. XAMLにx:Nameを書いておく
2. FindName
3. Add_(イベント名)
と、三つの工程を踏まなければならないので、イベントを登録するコントロールがひとつならいいですが、たくさんあるともう大変です。

つまりイベントハンドラがたくさんあるような本格的なGUIを、PowerShellから構築することは考えないほうがいいでしょう。

続きを読む

tag: Windows PowerShell C# イベント WPF XAML テンプレート スクリプト

PowerShellで.NETのウィンドウを生成する

ずっとブログのトップ記事がギャラリーになっていて、もう鏡開きなのでそろそろ普通の記事を出さないといけないと思っていたのですが、

なにしろネタがありませんでして、更新するにも出来ない状態だったのですが、今日は例によって祝日ではありませんか。

祝日は更新しなければならないという謎の使命感が今宵もクソ記事を生み出します。


最近、PowerShellを触っていたわけでもないのですが、ネタをひねり出した結果、PowerShellの記事を書くことにしました。


PowerShellでは.NET Frameworkのライブラリをコールできるので、もちろんWindows FormsやWPFなどGUI用のライブラリも使用できます。

これを使って、PowerShellからウィンドウを生成して表示することができるわけでして、
GUIで使える使い捨てツールを作りたいときとかいいんじゃないかと思いましたので、その方法について簡単に紹介していきます。


まあ、GUIで使える使い捨てツールは、記事「シェルスクリプトとかExcelとか」で書いたように、Excelで作るのもなかなかよい選択なんじゃないかと思ったりもしますけどね。


それでも今回はPowershellと.NETで、
・Windows Forms
・WPF(コード)
・WPF(XAML)
の三編でお送りします。

おまけとしてイベントハンドラについても述べます。
続きを読む

tag: PowerShell プログラム GUI WindowsForms WPF XAML スレッド イベント

サルでもわかる小遣い帳、公開!!!

昨日、記事「サルでもわかる小遣い帳、完成&明日公開! ~ 軌跡を振り返る ~」にて、
今日、公開予定であることをお伝えしましたが、予定通り公開致しました!

サルでもわかる小遣い帳 - サイバー少年の作品展示場
http://cyberboy6.web.fc2.com/mpcrecorder/


ところで、「サイバー少年の作品展示場」の各ソフト紹介ページで、サルでもわかる小遣い帳だけテーブルの要素のまわりにスペースがあるのですが、なんなんですかね…。

さて、思い出をだらだらと語るのは昨日の記事でやったので、今回は当ソフトの概要を語ろうと思います。

まずはスクリーンショットをご覧ください。
四枚の画像を一枚につなげているので、縮小されていて見づらいですが、画像をクリックしたら開けます。

スクリーンショット
スクリーンショット

続きを読む

tag: 自作ソフト サルでもわかる小遣い帳 小遣い帳ソフト(仮称) WPF サイバー少年の作品展示場

[WPF] KeyDownイベントとPreviewKeyDownイベントの違い

WPFではコントロールにKeyDownというイベントとPreviewKeyDownというイベントがあります。

「サルでもわかる小遣い帳」を作っているときに違いがよくわからなかったので、検証してみました。

とりあえずPreviewKeyDownはKeyDownよりも先に発生するんじゃないかと思えますね。

つまり、キーイベントは2回発生するということで、発生タイミングが違うじゃないかというわけです。


そこで、試しにWPFで、Windowの中にPanel、その中にButtonという構成のウィンドウを作ってみました。

なお、ロジック部分の使用言語はC#です。

続きを読む

tag: WPF イベント キーボード

小遣い帳ソフト(仮称)の暫定ウィンドウデザイン!

小遣い帳ソフト、久しぶりに進展させました。

今日は履歴表示ウィンドウのデザインをしたので、ご紹介します!
WPFアプリケーションで作りました。


暫定ウィンドウデザイン
暫定ウィンドウデザイン


一部変更はあると思いますが、大まかにはこんな配置になりますね。

画面中央リストの各アイテムを選択すると、
画面下の「詳細情報」というところのテキストボックスに、そのアイテムのデータがセットされます。

普段テキストボックスはEnableがFalseになっているのですが、画面右下の編集ボタンを押したらTrueになって、編集できるようになるといった具合です。


そういえば、編集ボタンのほかにも削除ボタンが追加される予定です。

選択している収入/支出の履歴を削除します。


この画面下のテキストボックスは既存の履歴の編集専用で、新規登録するさいは、今後作っていく予定の新規登録ダイアログで登録します。



今回はデザインしかしていませんでして、プログラムはこの後ですね。

表示されているデータは適当に設定したものです。

GUIのほうのプログラムは状態遷移が激しいので、非常に面倒くさそうですね…。

ちなみに、MVVM設計ではありません。

tag: 小遣い帳ソフト(仮称) 自作ソフト WPF

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。