C#,WPF,ソフトウェア開発

BindingにStringFormatを組み合わせることで、元データでデータを編集することなく、
桁区切りや日付のフォーマットなどを調整することができる。

また、ElementStyleにてTextAlignmentを設定することで、右寄せ・中央寄せができる。

C#,WPF,ソフトウェア開発

1次元配列であれば、DataGridにBindするだけで表示されるが、
クラスや構造体を用いた多次元配列をDataGridにBindする場合、
{Binding [プロパティ名]} が {Binding Path=[プロパティ名].[プロパティ名]} に変わる。

CSファイル

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        // 生徒配列
        List<Student> student = new List<Student>();

        student.Add(new Student(1, "塩沢 美智子", new Test(50, 60, 40, 50)));
        student.Add(new Student(2, "志村 薫", new Test(75, 56, 97, 30)));
        student.Add(new Student(3, "石崎 なつみ", new Test(75, 21, 26, 34)));
        student.Add(new Student(3, "島袋 ジョージ", new Test(77, 96, 64, 37)));
        student.Add(new Student(3, "森田 サンタマリア", new Test(99, 79, 61, 74)));

        grdData.DataContext = student;
    }
}

/// <summary>
/// 生徒クラス
/// </summary>
public class Student
{
    // 出席番号
    public int no { get; }

    // 名前
    public string name { get; }

    // テスト結果
    public Test test { get; }

    public Student(int _no, string _name, Test _test)
    {
        this.no = _no;
        this.name = _name;
        this.test = _test;
    }
}

/// <summary>
/// テスト結果クラス
/// </summary>
public class Test
{
    // 国語
    public int kokugo { get; }

    // 算数
    public int sansu { get; }

    // 理科
    public int rika { get; }

    // 社会
    public int syakai { get; }

    public Test(int _kokugo, int _sansu, int _rika, int _syakai)
    {
        this.kokugo = _kokugo;
        this.sansu = _sansu;
        this.rika = _rika;
        this.syakai = _syakai;
    }
}

XAMLファイル

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <DataGrid x:Name="grdData" Margin="10" ItemsSource="{Binding}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="出席番号" Binding="{Binding no}" />
                <DataGridTextColumn Header="名前" Binding="{Binding name}" />
                <DataGridTextColumn Header="国語" Binding="{Binding Path=test.kokugo}" />
                <DataGridTextColumn Header="算数" Binding="{Binding Path=test.sansu}" />
                <DataGridTextColumn Header="理科" Binding="{Binding Path=test.rika}" />
                <DataGridTextColumn Header="社会" Binding="{Binding Path=test.syakai}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

PHP,ソフトウェア開発

画像1つを返すPHPを作成し、AjaxでPHPを連続読み込みすることで
複数の画像を1ページに展開することが可能ではあるが、
Base64を使いPHP1つのみで複数展開する方法を記載する。

C#,ソフトウェア開発

WebBrowserがサイトの読み込みを完了すると、DocumentCompletedイベントが発生するが、
これはサイトのデータを読み込み完了したタイミングである。

読み込み完了後に実行されるJavaScript等で、サイトが変化した後の内容を取得したい場合は
下記のように、内容を比較し、変化が無くなるまで待機する必要がある。
(常時どこかしらが更新されるようなサイトの場合、無限ループに陥るので注意。)

C#,ソフトウェア開発

Html Agility Pack を使用すると、HTMLタグがオブジェクトのように扱え、
簡単に解析を行うことができる。

C#,ソフトウェア開発

await/async等の別スレッドからコントロールのプロパティを変更しようとすると、
コントロールの描画を行っているスレッドと異なる為、エラーとなる。

InvokeRequired で異なるスレッドからの呼び出しかを判定し、
異なる場合は Invoke で再呼び出しをすることで解決する。

ソフトウェア開発,開発環境

Visual Studio 2017 が正式リリースされました。

Visual Studio | Developer Tools and Services | Microsoft IDE

旧Ver同様、Community  2017 は無料となっています。

詳しい内容は下記に記載されています。

Visual Studio 2017 リリース ノート (日本語)

C#,ソフトウェア開発

Enum型をループで回すには、Enum.GetNames もしくは Enum.GetValues を用いる。
また、数値→Enum型はEnum型にキャストを、
Enum型→数値はInt型にキャストを、
Enum型→名前はToStringを用いる。

C#,ソフトウェア開発

Taskの配列を作成し、Task.WhenAllを呼ぶことで、
複数のTaskを同時に実行し、全てのTaskの処理が終了するまで待機する。