作成2013.05.01
数表を扱うには、DataGridView クラスを使用すると便利です。
- 参照元情報
DataGridView クラスは
「DataGridView クラス」にジャンプする
で詳細の機能説明がありますが、かなり難解です。
- WPFでのDataGridView クラス (C#)
DataGridView クラスは名前空間: System.Windows.Forms、アセンブリ: System.Windows.Formsの機能であり、WPFではユーザコントロールを使用する必要があります。
サンプルコードはDataGridView クラスの極一部の機能を利用して作成しました。サンプルコードですので、極簡単な機能です。
ダウンロード後は解凍してから使用してください。
[WPFでのマルチウインドウ (VB)]をダウンロードする。
解凍すると「45WpfDataGri1」フォルダーがあります。
注(1)「45WpfDataGri1」フォルダーの「WpfDataGri1.sln」ファイルをダブルクリックすると「Express 2012 for Windows Desktop」が起動します。
注(2)メニューの「ウインド」_「ウインドレイアウトのリセット」で標準に戻ります。
注(3)「ソリューションエクスプローラ」ウインドウ内の「MainWindow.xaml」をダブルクリックすると「デザイン」と「XAML」が表示されます。
注(4)メニューの「表示」_「コード」を選択するとコードが表示されます。
注(5)「WpfDataGri1.sln」の動作確認は「デバッグ」_「デバッグ開始」で実行します。デバッグ機能を用いて動作確認を行います。
- MultiWindow.slnの実行
(1)「Express 2012 for Windows Desktop」のデバッグ機能を使用します。
(2)「デバッグ」_「デバッグ開始」を選択します。
(3)画面が表示されます。
(4)数表の直径の欄に数値を入力し、Enterで円の面積を計算します。
(5)数表の行は自動的に追加されます。
(6)Buttonはデバッグ用です。
(7)クローズボックスで終了します。
- プロジェクトの構成
(1)MainWindow.xaml
・Button1とUserControl1を配置します。
(2)MainWindow.xaml.cs
・コードを配置します。
(3)UserCntrol1
・dataGridView1を配置します。
(4)UserCntrol1.cs
・コードを配置します。
- MainWindow.xamlの全コード
<Window x:Class="WpfDataGri1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:self="clr-namespace:WpfDataGri1"
Title="円の面積の計算" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="25" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<Button x:Name="Button1" Content="Button" Width="80" HorizontalAlignment="Left" Click="Button1_Click"/>
</StackPanel>
<WindowsFormsHost x:Name="wfHost" Grid.Row="1">
<self:UserControl1 x:Name="myControl" />
</WindowsFormsHost>
</Grid>
</Window>
・一般的な記述です。
- MainWindow.xaml.csの全コード
using System.Windows;
namespace WpfDataGri1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
var S = myControl.DGV.Rows[0].Cells[0].Value;
}
}
}
(1)private void Button1_Clickはデバッグ用であり、動作には影響しません。
(2)var S = myControl.DGV.Rows[0].Cells[0].Value;でdataGridView1のセルの値を参照できます。
- UserCntrol1.csの全コード
using System;
using System.Windows.Forms;
namespace WpfDataGri1
{
public partial class UserControl1 : UserControl
{
public double x;
public double a;
public DataGridView DGV;
public UserControl1()
{
InitializeComponent();
DGV = dataGridView1;
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.RowCount >= 2)
{
int ir = dataGridView1.CurrentCell.RowIndex;
int ic = dataGridView1.CurrentCell.ColumnIndex;
x = Convert.ToDouble(dataGridView1.Rows[ir].Cells[0].Value);
a = Math.PI * x * x / 4;
dataGridView1.Rows[ir].Cells[1].Value = a.ToString();
}
}
}
}
(1)public DataGridView DGV;でdataGridView1を他のクラスで参照可能とします。
(2)DGV = dataGridView1;で変数DGVにdataGridView1を設定します。
(3)int ir = dataGridView1.CurrentCell.RowIndex;でカレントセルの位置を知ります。
(4)x = Convert.ToDouble(dataGridView1.Rows[ir].Cells[0].Value);でxに直径を代入します。
(5)a = Math.PI * x * x / 4;で面積を計算します。
(6)dataGridView1.Rows[ir].Cells[1].Value = a.ToString();で面積を数表に代入します。
感想:
(1)非常に簡単な記載で数表が扱えます。