C# WPFプログラミングの迷い道

C# WPFで株式投資ツールの作成に挑戦する!

PanRollingチャートギャラリーから、銘柄と株式コードを取得するC# WPFアプリケーションを作成する

実際に、C# WPFで、PanRollingチャートギャラリーから、銘柄と株式コードを取得できるか、確認したいと思います。

WPFアプリケーションでPanRollingチャートギャラリーから、銘柄と株式コードの一覧を取得するサンプルプログラムです。

 

PanRollingチャートギャラリーを操作するcomを利用する手順

アプリケーションが、PanRollingチャートギャラリーから、株価データを取得するためには、comを使用する必要があります。そのため、利用するパソコンに、あらかじめ、PanRollingチャートギャラリーが、インストールされている必要があります。

実際に購入してから、自分に、C#から使うだけのスキルが無いことが明確になると、寂しい気持ちになるので、体験版を使って動作を確認していきます。

PanRollingチャートギャラリーの体験版は、「 Pan Rolling相場アプリケーション試用版」としてダウンロードできます。

  1. WPFアプリケーションを作成する
  2. 参照を追加する
  3. [プロジェクト] - [参照の追加] - [COM] タブ を選択
  4. Pan Active Market Database 1.3にチェック
  5. ActiveMarket という参照が追加される。

使用されている COM DLL は、amarket.dll です。

Pan Active Market Database 1.3にチェック

Pan Active Market Database 1.3にチェック

オブジェクトブラウザを使って、利用可能なメソッドを確認する

C#には、リフレクションと呼ばれる機能が存在するため、プログラムから、クラスや列挙体の内容を確認できます。また、プログラムを自分で作成しなくても、Visual Studioには、オブジェクトブラウザという機能が用意されており、その機能で、クラスの内容を確認することができます。

PanRollingチャートギャラリーを操作するcomにおいても、使用可能なメソッドは、オブジェクトブラウザを使用して確認できます。

また、オブジェクトブラウザで確認しなくても、インストールしたフォルダに、ヘルプファイルamarket.chmが存在します。

表示から、オブジェクトブラウザを選択します。

表示から、オブジェクトブラウザを選択

表示から、オブジェクトブラウザを選択

オブジェクトブラウザで、確認したいクラスを選択する。

オブジェクトブラウザで、確認したいクラスを選択

オブジェクトブラウザで、確認したいクラスを選択

PanRollingチャートギャラリーから、株式コードを取得するC# WPFアプリケーションを作成する

C#の技能が向上してくると同じと認識できるのかもしれませんが、C#にあまり馴染んでいない状況では、コンソールアプリケーション、Formアプリケーション、WPFアプリケーションは、全く、異なるコードに見えます。

私は、WPFアプリケーションを利用しているので、WPFアプリケーションで、利用できるコードが必要です。

まずは、PanRollingチャートギャラリーから、株式コードを取得するC# WPFアプリケーションを作成します。

コードと銘柄を格納するクラス

stock_CodeAndName.cs

using System;

namespace PanChart_GetValue
{
    class stock_CodeAndName
    {
        public string stock_name { get; set; }
        public string stock_code { get; set; }

        public stock_CodeAndName(string code, string name)
        {
            stock_code = code;
            stock_name = name;
        }
        public stock_CodeAndName(object code, object name)
        {
            stock_code = Convert.ToString(code);
            stock_name = Convert.ToString(name);
        }
    }
}

コードと銘柄のリストを格納するクラス

stock_CodeAndNames.cs

using System.Collections.ObjectModel;

    namespace PanChart_GetValue
    {
        class stock_CodeAndNames
        {
            public ObservableCollection _CodeAndNames = new ObservableCollection();
    
            public stock_CodeAndNames()
            {
                ActiveMarket.Names Names = new ActiveMarket.Names();
    
                System.Array codeArray;
                System.Array nameArray;
    
                Names.AllNames(ActiveMarket._KindFlag.AM_KINDFLAG_SPOTS, out codeArray, out nameArray);
    
                for (int i = 0; i < codeArray.Length; i++)
                {
                    _CodeAndNames.Add(new stock_CodeAndName(codeArray.GetValue(i+1), nameArray.GetValue(i+1)));
                }
            }
    
        }
    }

メインウインドウ

MainWindow.xaml

<Window x:Class="PanChart_GetValue.MainWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                Title="株式銘柄リスト" Height="400" Width="350">
            <DockPanel>
                <DockPanel DockPanel.Dock="top">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                            <ColumnDefinition Width="2*"></ColumnDefinition>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <TextBox Name="stock_code_box" 
                                 Height="23" Grid.Column="0"/>
                        <TextBox Name="stock_name_box" 
                                 Height="23" Grid.Column="1"/>
                       
                    </Grid>
                </DockPanel>
                <ListView Name="TradingNameList">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="株式コード" 
                                                DisplayMemberBinding="{Binding stock_code}" />
                            <GridViewColumn Header="銘柄名" 
                                                DisplayMemberBinding="{Binding stock_name}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </DockPanel>
        </Window>

分離コード

MainWindow.xaml.cs

using System.Windows;
    using System.Windows.Controls;
    
    namespace PanChart_GetValue
    {
        /// <summary>
        /// MainWindow.xaml の相互作用ロジック
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                stock_CodeAndNames CodeAndName = new stock_CodeAndNames();
                TradingNameList.ItemsSource = CodeAndName._CodeAndNames;
            }
    
            private void TradingNameList_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
    
                // 項目を選択したとき、それぞれのメンバを表示する
    
                // ListViewで何も選択されていない場合は何もしない
                if (TradingNameList.SelectedItem == null) return;
    
                // ListViewで選択されている項目を取り出す
                stock_CodeAndName ListItem = (stock_CodeAndName)TradingNameList.SelectedItem;
    
                //  ListViewで選択されている項目をテキストボックスに表示する
                stock_code_box.Text = ListItem.stock_code;
                stock_name_box.Text = ListItem.stock_name;
    
            }
    
        }
    }

実行結果

株式コードと銘柄名が表示されます。

リスト内で、銘柄を選択すると、上部のTextBlockに表示されます。

実行すると銘柄コードと銘柄名が表示されます。

実行すると銘柄コードと銘柄名が表示されます。

参考

 

kukekko.hateblo.jp

 

 

kukekko.hateblo.jp