30章:10 行でズバリ!! [C#] マウス イベントの制御

    作成2013.04.22

     Silverlight アプリケーションとWPFアプリケーションのコードは完全互換ではなさそうですが、わずかな修正でSilverlight アプリケーション用サンプルコードをWPFアプリケーション用コードに変換できます。
     ここでは、Silverlight アプリケーション用サンプルコードをWPFアプリケーション用コードに変換します。
     10 行でズバリ!! [C#] マウス イベントの制御は下記の参照元情報から作成方法の説明と解説を参照できます。

  1. 参照元情報
     10 行でズバリ!! [C#] マウス イベントの制御
    「10 行でズバリ!! [C#] マウス イベントの制御」にジャンプする
     作成方法の詳細は上記を参照願います。


  2. 10 行でズバリ!! [C#] マウス イベントの制御の完成ファイル
     10 行でズバリ!! [C#] マウス イベントの制御の解説とおりに作業を実施すると、C#プロジェクトファイル群が完成しますが、 ここでは、VBで作成したプログラムをC#言語に変換を基本とします。
     完成ファイルは以下からダウンロードできます。
     ダウンロード後は解凍してから使用してください。
      [10 行でズバリ!! [C#] マウス イベントの制御]をダウンロードする。
     解凍すると「30MouseEvents」フォルダーがあります。
    注(1)「30MouseEvents」フォルダーの「MouseEvents.sln」ファイルをダブルクリックすると「Express 2012 for Windows Desktop」が起動します。
    注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
    注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」が表示されます。
    注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
    注(5)「MouseEvents.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。


  3. MouseEvents.slnの実行
    (1)「Express 2012 for Windows Desktop」のデバッグ機能を使用します。
    (2)「デバッグ」_「デバッグ開始」を選択します。
    (3)操作画面が表示されます。
    ((4)上の欄を右クリックするとメセージボックスが表示されます。
    (5)中段の欄でホイールで色が変わります。
    (6)下の欄で右クリックするとメニューが表示されます。
    (7)クローズボックスで終了します。


  4. 新規プロジェクトの作成
    (1)MainWindow.xamlのデザイン設定
     新規プロジェクトを作成すると「デザイナー」にはMainWindow.xamlが自動生成されます。MainWindow.xamlのデザイン設定はVBのMainWindow.xamlのコピー&ペーストで完成します。

    (2) MainWindow.xaml.csコード
     基本コードが自動生成されます。


  5. MainWindow.xamlの全コード
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <Grid x:Name="LayoutRoot" Background="White">
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
    
            <Border Grid.Row="0" x:Name="border1" Background="LightCyan">
                <TextBlock Text="右クリックでメッセージ ボックスを表示します。" />
            </Border>
    
            <Border Grid.Row="1" x:Name="border2" Background="LightYellow">
                <TextBlock Text="マウスのホイール操作で色が変わります。" />
            </Border>
    
            <Canvas Grid.Row="2" x:Name="canvas1" Background="LightSkyBlue">
                <TextBlock Text="右クリックでメニューを表示します。" />
    
                <Popup x:Name="contextMenu">
                    <ListBox>
                        <TextBlock Text="Blue" MouseLeftButtonUp="menu_MouseLeftButtonUp" />
                        <TextBlock Text="Red" MouseLeftButtonUp="menu_MouseLeftButtonUp" />
                        <TextBlock Text="Green" MouseLeftButtonUp="menu_MouseLeftButtonUp" />
                        <TextBlock Text="Yellow" MouseLeftButtonUp="menu_MouseLeftButtonUp" />
                    </ListBox>
                </Popup>
            </Canvas>
        </Grid>
    </Window>
        </Grid>
    </Window>
    


  6. MainWindow.xamlコードの解説
    (1)<UserControl x:Class="MySilverlightApp.MainPage"が<Window x:Class="MainWindow"に変更となります。  (<Window x:Class="MainWindow"はWPFアプリケーションのデホルトです。)
    (2)その他変更ありません。


  7. MainWindow.xaml.csの全コード
    using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Input;
    using System.Windows.Media;
    
    namespace MouseEvents
    {
        public partial class MainWindow : Window
        {
            Boolean LeftButtonDown = false;
            int colorValue = 0;
            public MainWindow()
            {
                InitializeComponent();
                //border1.MouseRightButtonDown += new MouseButtonEventHandler(border1_MouseRightButtonDown);
                //border1.MouseRightButtonUp += new MouseButtonEventHandler(border1_MouseRightButtonUp);
                //border2.MouseWheel += new MouseWheelEventHandler(border2_MouseWheel);
                //canvas1.MouseRightButtonDown += new MouseButtonEventHandler(canvas1_MouseRightButtonDown);
                //canvas1.MouseRightButtonUp += new MouseButtonEventHandler(canvas1_MouseRightButtonUp);
            }
            private void border1_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
            {
                e.Handled = true;
            }
            private void border1_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
            {
                MessageBox.Show("右クリックしました");
            }
            private void border2_MouseWheel(object sender, MouseWheelEventArgs e)
            {
               colorValue += e.Delta / 4;
                if (colorValue < 0) colorValue = 0;
                if (colorValue > 255) colorValue = 255;
                Color c = Color.FromArgb(255,
                    255, Convert.ToByte(255 - colorValue), Convert.ToByte(colorValue));
                border2.Background = new SolidColorBrush(c);
            }
            private void canvas1_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
            {
                e.Handled = true;
            }
            private void canvas1_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
            {
                Point pt = e.GetPosition(canvas1);
                contextMenu.SetValue(Canvas.LeftProperty, pt.X);
                contextMenu.SetValue(Canvas.TopProperty, pt.Y);
                contextMenu.IsOpen = true;
            }
            private void menu_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
            {
                if (sender is TextBlock)
                {
                    TextBlock tblock = sender as TextBlock;
                    System.Reflection.PropertyInfo pinfo = typeof(Colors).GetProperty(tblock.Text);
                    if (pinfo != null)
                    {
                        Color c = (Color)pinfo.GetValue(null, null);
                        canvas1.Background = new SolidColorBrush(c);
                    }
                }
                contextMenu.IsOpen = false;
            }
        }
    }
    


  8. MainWindow.xaml.csコードの解説
    (1)Boolean LeftButtonDown = false;は意味がないようです。 (2)border1.MouseRightButtonDown += new MouseButtonEventHandler(border1_MouseRightButtonDown);は上段の右クリックダウンのイベントを追加を意味しますが不要です。 (4)e.Handled = true;で標準の右クリックメニューを無効にします。 (5)MessageBox.Show("右クリックしました");でメッセージボックスを表示します。 (6)private void border2_MouseWheelで色を変化させます。 (7)private void canvas1_MouseRightButtonDownでポップアップメニューを表示します。 (8)private void menu_MouseLeftButtonUpで下段の色を変化させます。


    感想:
    (1)VBからC#への変換は比較的に簡単でした。







31章:ピクチャ ビューアーの作成に行く。

トップページに戻る。