エセSE's profileなんとなくSEな日々PhotosBlogLists Tools Help

エセSE

海皇紀 32 (32) (講談社コミックス 月刊少年マガジン)
三毛猫ホームズ シリーズ
ARIA(11) (BLADE COMICS)
Photo 1 of 26

なんとなくSEな日々

PGにはなるまいと思っていたけどPGになっているような気がする…
August 12

VS2008 SP1とか

今日、VS2008 SP1、.NET Framework 3.5 SP1が公開されたようです。
早速DLしてインストール…と思ったんですが、明日朝早く実家へ帰るのでもう寝たい。
というわけで帰ってきてからインストールします。
 
さっき紹介サイトをちょろっと眺めたなかでは、WPFデザイナにもイベントのウィンドウが出現したことと、
バインディングのときに書式指定できるようになったことが「おっ」と思った機能ですかね。
 
でも、リアル仕事ではWindowsアプリ作らないんですよね…。
実はその仕事はあったんですけど、優先度が高いもう一つの仕事とあわせてやるのは
私にとってはオーバーワーク。というわけで他の人にお願いせざるを得ない状況に…。
Windowsアプリ作るの楽しいのになぁ。
August 08

夏休み

明日は出勤して、明後日から1週間の夏休みです。
長すぎる1週間、何をして過ごしましょうかね…。
とりあえず、帝国にはいちど研究の邪魔をしに行き、かつ会社からは
PCの持ち出し許可をもらって家で仕事ですかね。(今のご時世、勝手に持ち帰れないんですね。)
 
実家への帰省は13日かなぁ。(未定だったりする。)
 
 
---------------------------------
今日は会社の夏祭りでした。
スタッフとして動いていたので、とても疲れました。
お客さんとして参加したいです…。
August 02

ホイールとタイヤ換えました

超久々の書き込みです。最近仕事が修羅場気味で…。
今日は仕事場の冷房が入っていないので出勤はキャンセル。
暑い職場でうちわをあおぎながら仕事するのは勘弁願いたいですからね~。
 
久々の土曜日のお休みはタイヤ+ホイールの交換。
先日タイヤのひび割れが発覚したので、この際ホイールも鉄からアルミへ交換してしまえ、というわけです。
とはいうものの、今インチアップが流行しているせいで、15インチのホイールの数が少ない!
(マイカーは15インチホイールが標準。インチアップはしません。乗り心地が悪くなるのはイヤ。)
なんとか選んだものはRAYS United Arrows FR。
こいつにブリヂストンのエコピアで10万を切った値段だったので決めてしまいました。
ホイールの店頭品は大幅値引きで助かりました。(店頭品じゃなければ+2万円だった)
 
で、使用後の感想はというと、確かに乗り心地はよくなりました。今までのタイヤより静かです!
とはいえ、比べるタイヤが6年もののひび割れタイヤじゃあ、
どれに換えたって乗り心地が良くなるような気も…。
とりあえず、これでバーストの心配をせずに運転できます!雨の日も大丈夫!
June 10

忙しすぎ。

めちゃくちゃ久々の更新です。
入院してたとか、海外出張してたわけではありません。
単に忙しかった、それだけです。
そして、これからもっと忙しくなるんですね~。
 
ありえない開発スケジュールにのたうちまわる暇もなく、
今懸命に開発作業をしています。
期日までに終わらないよ…。
 
そういえば、最近「CD2WAV32」「WPF」「バインディング」という単語で
えらくこのBlogにアクセスがあります。
CD2WAV32の記事以外、有用な情報は載ってないと思うんですがね。
コード例もほとんど載せてないし。
May 08

WPF バインディングとカスタムルーティングイベント

今回は思いっきりプログラムの話。私の備忘録がわりです。
まずはバインディングの話。
 
以前、バインディングの記事を書いたときに、
自身のDependencyPropertyを自身の子要素にバインディングするには、FindAncestorで先祖を探さねば~
と書いていました。しかし、これ大間違いでした。
別に先祖を探さなくても、以下のようなコードで、Name属性を親につけておけばOKでした。
ただし、親にName属性をつけていないときはFindAncestorの出番です。
2008/11/19 うそでした。FindAncestorを使わなくても、DataContextに自身を設定しておけばおK。
 
XAMLはこう。
<Window x:Class="WPFtest.Window2"
    xmlns="
http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="
http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window2" Height="100" Width="150" Name="w2">
    <Grid>
  <TextBlock Name="t1">
   <TextBlock.Text>
    <Binding Path="Num" ElementName="w2"/>
   </TextBlock.Text>
  </TextBlock>
    </Grid>
</Window>
 
コードビハインドはこう。依存関係プロパティを一つ定義してます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace WPFtest
{
 /// <summary>
 /// Window2.xaml の相互作用ロジック
 /// </summary>
 public partial class Window2 : Window
 {
  public Window2()
  {
   InitializeComponent();
  }
  public static readonly DependencyProperty NumProperty =
   DependencyProperty.Register("Num", typeof(int), typeof(Window2), new PropertyMetadata(10));
  public int Num
  {
   get { return (int)GetValue(NumProperty); }
   set { SetValue(NumProperty, value); }
  }
 }
}
 
つづいてカスタムルーティングイベントについて。
前からMSDNのカスタムルーティングイベントの項目を眺めていましたが、今日、やっとわかりました。
MSDNではイベント引数にRoutedEventArgsを使った例を出していましたが、
これはイベント引数に独自の要素を加えられないので今ひとつ使えない。
というわけでカスタムイベント引数を持たせたルーティングイベントを作成するサンプルを載せます。
UserControl1クラスというカスタムコントロールを作って、それにイベントを記述します。
 
まず、カスタムイベント引数となるクラスを作成。今回はMouseEventArgsを継承させて作ります。
引数の独自要素として、string型のTempを作っておきます。
 
 public class CustomRoutedEventArgs : MouseEventArgs
 {
  private string temp;
  public string Temp
  {
   get { return temp; }
   set { temp = value; }
  }
  public CustomRoutedEventArgs(MouseDevice mouse, int timestamp, string temp)
   : base(mouse, timestamp)
  {
   this.temp = temp;
  }
  protected override void InvokeEventHandler(Delegate genericHandler, object genericTarget)
  {
   UserControl1.TestEventHandler handler = (UserControl1.TestEventHandler)genericHandler;
   handler(genericTarget, this);
  }
 }
 
次にカスタムイベントをUserControl1クラスに作成。イベント名はTestとします。
 
・ルーティングイベント(今回はバプル型)
  public static readonly RoutedEvent TestEvent = EventManager.RegisterRoutedEvent("Test", RoutingStrategy.Bubble, typeof(TestEventHandler), typeof(UserControl1));
・イベントを登録
  public event TestEventHandler Test
  {
   add { AddHandler(TestEvent, value); }
   remove { RemoveHandler(TestEvent, value); }
  }
・独自イベント引数をとらせるイベントデリゲート
  public delegate void TestEventHandler(object sender, CustomRoutedEventArgs e);
・このサンプルではマウスダウンをオーバーライドして、ここから呼び出し。
  protected override void OnMouseDown(MouseButtonEventArgs e)
  {
   base.OnMouseDown(e);
//以下3行がルーティングイベント発生コード。
   CustomRoutedEventArgs args = new CustomRoutedEventArgs(e.MouseDevice, e.Timestamp, "カスタム引数");
   args.RoutedEvent = TestEvent;
   RaiseEvent(args);
  }
 
こんな具合。
で、こいつをカスタムコントロールなんかに書いておけば、貼り付けた先で
「独自のイベント引数をもった」イベントを拾えます。