かずきのBlog
C#やJavaやRubyとメモ書き

目次

Blog 利用状況
  • 投稿数 - 426
  • 記事 - 1
  • コメント - 461
  • トラックバック - 112
ニュース
  • 思い出は、いっぱい。
コメント
プログラマ的自己紹介
  • C#とRubyを趣味で。Javaを仕事で使ってやってます。 WPFをコツコツ勉強中。 IDE大好き。Visual Studio, Eclipse, NetBeansを使用中
お気に入りのツール/IDE
  • Visual Studio 2008 std
  • Eclipse
  • NetBeans6.0以降
  • 自作のツール
プロフィール
  • 大田 一希
  • 1981年1月30日産まれ
  • AB型
  • 左利き
経歴
  • 1993年 海田中学校 入学
  • 1996年 広島県立安芸南高等学校 入学
  • 1999年 某大学 環境情報学科 入学
  • 2003年 某大学 大学院 環境学研究科 入学
  • 2005年 就職して上京
  • 今に至る
アクセサリ
  • あわせて読みたい
  • ログ解析ネット証券

書庫

日記カテゴリ

 

イベントというと、一番なじみが深いのはボタンのクリックイベントだと思う。
これからイベントの勉強をしていく上で、なじみの深いものから触れていくのはとってもええことじゃろう。

というわけで、夜も遅いのでボタンを押したらテキストブロックのラベルがHello Event!!に変わるものを作って寝ようと思う。

久しぶりにXAMLじゃなくてコードで画面を組んでみようと思う。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;

namespace WpfEventIntro
{
    public class MyApplication : Application
    {
        public MyApplication()
        {
            Startup += (sender, e) =>
                {
                    HelloEventWindow window = new HelloEventWindow();
                    window.Show();
                };
        }

        [STAThread]
        static void Main(string[] args)
        {
            new MyApplication().Run();
        }
    }

    public class HelloEventWindow : Window
    {
        public HelloEventWindow()
        {
            Init();
        }

        private void Init()
        {
            // 画面組み立て
            var stackPanel = new StackPanel();
            Content = stackPanel;

            var textBlock = new TextBlock();
            stackPanel.Children.Add(textBlock);

            var button = new Button();
            button.Content = "Click!";
            // イベント!お馴染みです。
            button.Click += (sender, e) =>
                {
                    textBlock.Text = "Hello Event!!";
                };

            stackPanel.Children.Add(button);
        }
    }
}

イベントは、ハンドラこしらえるのがめんどくさかったのでラムダで書きました。

ApplicationとWindowがあるだけのシンプルなものです。
コードで画面を組み立てているのは、HelloEventWindowクラスのInitメソッド内です。
StackPanelを作ってTextBlockとButtonを追加してるだけのシンプルなものです。

button.Click += ...がイベントを追加してるコードになります。ここらへんは、.NET組み込みのイベントを使う場合となんら変わりありません。
ということで、上っ面を使うだけなら同じ感覚で使えます。

 

さて、これを実行すると
image

ボタンをクリックすると
image

予想通り。

次への勉強ネタのためにちょびっと改造をくわえます。

    public class HelloEventWindow : Window
    {
        private TextBlock textBlock;

        public HelloEventWindow()
        {
            Init();
            // こういうこともできる。
            AddHandler(Button.ClickEvent, new RoutedEventHandler(ClickHandler));
        }
        private void ClickHandler(object sender, RoutedEventArgs e)
        {
            textBlock.Text = "これでもHello Event!!";
        }

        private void Init()
        {
            // 画面組み立て
            var stackPanel = new StackPanel();
            Content = stackPanel;

            // フィールドに移動!
            textBlock = new TextBlock();
            stackPanel.Children.Add(textBlock);

            var button = new Button();
            button.Content = "Click!";
            // イベント!お馴染みです。
            /* ここのイベントは無し
            button.Click += (sender, e) =>
                {
                    textBlock.Text = "Hello Event!!";
                };
            */
            stackPanel.Children.Add(button);
        }
    }

もともとあったイベントの定義をさくっとコメントアウトして、WindowのAddHandlerでButton.ClickEventに対してRoutedEventHandlerを設定しています。
こうすると、ボタンに直接イベントを結び付けてないのにちゃんと実行されます。
ボタンを2個置いても大丈夫。

    public class HelloEventWindow : Window
    {
        private TextBlock textBlock;

        public HelloEventWindow()
        {
            Init();
            // こういうこともできる。
            AddHandler(Button.ClickEvent, new RoutedEventHandler(ClickHandler));
        }
        private void ClickHandler(object sender, RoutedEventArgs e)
        {
            textBlock.Text = "これでもHello Event!!";
        }

        private void Init()
        {
            // 画面組み立て
            var stackPanel = new StackPanel();
            Content = stackPanel;

            // フィールドに移動!
            textBlock = new TextBlock();
            stackPanel.Children.Add(textBlock);

            var button = new Button();
            button.Content = "Click!";
            // イベント!お馴染みです。
            /* ここのイベントは無し
            button.Click += (sender, e) =>
                {
                    textBlock.Text = "Hello Event!!";
                };
            */
            stackPanel.Children.Add(button);

            var button2 = new Button();
            button2.Content = "第二ボタン!";
            stackPanel.Children.Add(button2);
        }
    }

実行してみると…
image

第二ボタン!を押下すると…
image

ちゃんとイベントが処理されてる。
ここらへん、WPFのイベントの動きの肝みたい?

眠いのでここまで。

投稿日時 : 2008年2月21日 0:37
コメント
  • # [C#][WPF]イベントじゃけん その2
    かずきのBlog
    Posted @ 2008/02/21 23:27
    [C#][WPF]イベントじゃけん その2
  • # [C#][WPF]イベントじゃけん その3
    かずきのBlog
    Posted @ 2008/02/24 1:27
    [C#][WPF]イベントじゃけん その3
タイトル  
名前  
Url
コメント