かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

[C#][WPF]コマンドですね

今までGUIアプリケーションといえば、C++BuilderでVCLを使って作ったり、VC++でMFCを使って作ったり、JavaでSwingを使って作ったり、.NETでWindowsFormsを使って作ったりしてきた。
今のWPFは勉強中なので、何かまとまったもとを作ったか?といわれると作ってない!

話は変わってコマンドです。
WindowsFormsで何かを作ろうとしたときには、毎回コマンドインターフェースを定義してとかっていうことをやってた。
(毎回というほど作りこんで無いけど)

Idleイベントを捕まえて表示を更新したりする仕組みとか、Executeメソッドを定義してメニューがおされたら特定のコマンドのExecuteが呼ばれるとかいうのを作りこんだ。
WPFでは?コマンドが用意されています。

すばらしい!!しかも、自分で作るなんちゃってクラスよりもきっといいもののはずだ。
ということで、超基本のSystem.Windows.Input.ICommandインターフェースから見ていこうと思う。
このインターフェースは、ExecuteとCanExecuteの2つのメソッドと、CanExecuteChangedイベントが定義されているだけのシンプル設計。コードで書くとしたらこんな感じ?

interface ICommand
{
  void Execute(object parameter);
  bool CanExecute(object parameter);
  event EventHandler CanExecuteChanged;
}

未コンパイルなので間違いがあっても知らない!イメージだけ。

とりあえず、使ってみようと思う。
作ってみるのは、以下のような仕様のクラス。

"print 表示したい文字列"という文字列を受け取ると"表示したい文字列"の部分を標準出力へ出力する。
それ以外の文字列が渡された場合は、CanExecuteがfalseを返す。

さくっと作る。

    class PrintCommand : ICommand
    {
        private static readonly Regex PATTERN = new Regex(@"^print (?<param>.+)$");

        public bool CanExecute(object parameter)
        {
            string input = parameter as string;
            if (input == null)
            {
                return false;
            }

            return PATTERN.IsMatch(input);
        }

        public event EventHandler CanExecuteChanged; // 今回は使いません

        public void Execute(object parameter)
        {
            Match match = PATTERN.Match(parameter as string);
            Console.WriteLine(match.Groups["param"].Value);
        }
    }

動きを確認するためのテスト用メインメソッド

    class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();

            ICommand command = new PrintCommand();
            if (command.CanExecute(input))
            {
                command.Execute(input);
            }
        }
    }

実行すると

print Hello world ← これを入力
Hello world

みたいになる。
こういう基本的だけど、みんなが作りそうなクラスがあらかじめ用意されているというのはすばらしいことだね。

これを見て感じることは、毎回ICommandを実装するの??ということだけど、そんなことは勿論無い。
でも眠いので今日はここまで。

投稿日時 : 2008年3月16日 1:40

Feedback

# [C#][WPF]コマンドですね その2「GUIにコマンドを結びつける」 2008/03/16 10:39 かずきのBlog

[C#][WPF]コマンドですね その2「GUIにコマンドを結びつける」

# [C#][WPF]コマンドですね その3「ショートカットとコマンドを結びつける」 2008/03/16 10:55 かずきのBlog

[C#][WPF]コマンドですね その3「ショートカットとコマンドを結びつける」

# [C#][WPF]コマンドですね その4「ショートカットとコマンドを結びつけるXAML版」 2008/03/16 11:03 かずきのBlog

[C#][WPF]コマンドですね その4「ショートカットとコマンドを結びつけるXAML版」

# [WPF][C#]コマンドですぞ その6「ICommandSource」 2008/03/18 0:16 かずきのBlog

[WPF][C#]コマンドですぞ その6「ICommandSource」

# WPFRibbon?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? | ?????????????????????????????????????????? 2011/05/04 1:23 Pingback/TrackBack

WPFRibbon?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? | ??????????????????????????????????????????

# men moncler jackets 2012/12/08 3:40 http://supermonclercoats1.webs.com/

Thanks for the sensible critique. Me and my neighbor were just preparing to do a little research about this. We got a grab a book from our area library but I think I learned more clear from this post. I'm very glad to see such magnificent info being shared freely out there.

# longchamps 2012/12/14 22:50 http://www.sacslongchamp2012.info

Very useful info. Hope to observe more items soon!

# longchamp le pliage 2012/12/15 15:52 http://www.sacslongchamp2012.info/longchamps-darsh

The stars of this pool are classified as the comments as well as the pictures happen to be secondary.

# sac longchamps france 2012/12/16 21:40 http://www.sacslongchamp2012.info/sacs-longchamp-c

It's ALL RIGHT. You can definitely a myspace star =)

# sacs le pliage longchamp hobo 2012/12/17 21:05 http://www.sacslongchamp2012.info

I be aware of everybody can hate about them, but I do not think they start looking so unhealthy.

# cheap burberry outlet 2012/12/18 20:54 http://www.burberryoutlet2012.info/category/burber

Its program are therefore fantastic in addition to working layout so immediate.

# burberry outlet 2012/12/18 22:08 http://burberryukoutlets.wordpress.com/category/bu

I have not looked in to Sennheisers together with am in need of new tote.

# sacs burberry pas cher 2012/12/19 13:45 http://sacburberrysoldesfr.webnode.fr/actualites

The stars of the pool would be the comments and the pictures usually are secondary.

# michael kors paris sac 2012/12/22 18:00 http://michael-kors-canada.webnode.fr/blog/

It's ACCEPTABLE. You can certainly be a facebook star =)

# Jordan Retro 3 2013/03/06 21:21 http://www.jordanretro3air.com/

This most severe means by which to can miss one is intended to be staying ideal beside these products bearing in mind it's possible to‘g you can keep them. Jordan Retro 3 http://www.jordanretro3air.com/

# casquette obey 2013/03/16 7:24 http://www.b44.fr/

Possibly Jesus hopes united states to find a couple inappropriate everyday people well before joining the right choice, guaranteeing that back when we actually fulfill the personal, we are going to understand how to end up being pleased. casquette obey http://www.b44.fr/

# usine23 2013/03/25 5:14 http://e55.fr/

A honest coworker is certainly one who else overlooks your entire lock-ups along with tolerates your entire positive results. usine23 http://e55.fr/

# coach bag outlet 2013/04/07 14:50 http://www.coachoutletcoupon22.com/

Any time you would probably retain the hidden secret from the an opponent, reveal the idea by way of the someone i know. coach bag outlet http://www.coachoutletcoupon22.com/

# sarenza soldes 2013/04/07 20:21 http://ruemee.com/

Real love will be the mainly rational and consequently satisfactory solution concerning real human survival. sarenza soldes http://ruemee.com/

# asos 2013/04/08 15:20 http://rueree.com/

The buddie most likely are not a person, then again a person can be a buddie. asos http://rueree.com/

# coach outlet las vegas 2013/04/08 17:06 http://www.coachoutletonline66.com/

Throughout money my associates grasp all of; throughout difficulty when they're older my associates. coach outlet las vegas http://www.coachoutletonline66.com/

# Please continue to insist on writing it, you must have a lot of money results! 2014/12/26 10:35 ray ban 2015

Please continue to insist on writing it, you must have a lot of money results!

# I hope in the near future can once again enjoy the style of your article, the article was very well written! 2014/12/26 10:37 uggs clearance

I hope in the near future can once again enjoy the style of your article, the article was very well written!

# NrqdQucvQvS 2015/05/03 7:58 horny

G0nZbN http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

# mxWohhfTLDKmlEf 2015/05/19 13:03 Felipe

Do you know each other? http://www.smhv.nl/aanmelden penegra time The Liberals and Christian Democrats, who are expected toenter coalition talks with the two bigger parties next week,have both said they will fight to keep the oil industry out ofLofoten to protect its pristine environment, its tourism and theworld's largest cod stock.

タイトル  
名前  
Url
コメント