キャラ一覧を表示する
まずは、キャラ一覧を表示する画面(フォーム)を用意する。
そのフォームへキャラ一覧(DataGridView)を配置し、キャラ情報をうめる。
キャラ一覧を表示する画面(フォーム)を用意する
普通に、プロジェクトへ「フォーム」を追加する。
ただ、キャラ一覧を表示する画面は全属性を用意する必要がある。
属性の種類は、「紅・藍・翠・黄・天・冥」の計6個。
解決案として考えられるのは、
1.フォームを1つ用意し、TabControlを配置、TabPageを6個用意する。
2.フォームを1つ用意し、そのフォームを「DockContent」化。
このフォームのインスタンスを6個作成する。
キャラ属性毎に、キャラ一覧が分離して表示できたら便利そうなので、解決案2で行きます。
DockPanel と DockContent
「ドッキング可能」フォームを作りたいと、こぱちゃんに聞くと、「WeifenLuo.WinFormsUI.Docking」パッケージを推してもらった。
ドッキングされる側が「DockPanel」で、ドッキング対象が「DockContent」らしい。
それぞれフォームを用意し、
・ドッキングされるフォームに「DockPanel」を配置する
・ドッキング対象のフォームを「DockContent」から継承する
ドッキング対象のフォームの継承例
※もともと「Form」から継承していたのを「DockContent」に変更する。
using WeifenLuo.WinFormsUI.Docking;
public partial class AttributeForm : DockContent
これで、1つの属性キャラ一覧を表示するフォームができたことになるので、あとはドッキングされるフォームで全属性のフォームを作成する。
private List<AttributeForm> views;
foreach (var attr in [全属性]) {
views.Add(new AttributeForm());
}
foreach (var view in views) {
view.DockState = DockState.Document;
}
キャラ一覧(DataGridView)を作成
DataGridViewへキャラ情報を表示する。
DataGridViewは表形式のデータ表示編集コントロールで、「データバインディング」というのを利用するといいと、こぱちゃんからおしえてもらった。
データバインディングを利用するのにあたり、まずは表示元のデータ(1つ分のキャラ情報)を用意する必要があるとのこと。
public class MemeMoriChar
{
/// <summary>
/// キャラ識別
/// </summary>
public int CharID { get; set; }
/// <summary>
/// キャラ名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 情報URL
/// </summary>
public string ContentUrl { get; set; }
/// <summary>
/// アイコンURL
/// </summary>
public string IconUrl { get; set; }
/// <summary>
/// 初期レアリティ
/// </summary>
public MemeMoriRarity InitRarity { get; set; }
}
そして、取得したキャラ情報をキャラ個数分セットする。
private List<MemeMoriChar> charListOrg { get; set; }
DataGridViewを作成
private DataGridView dgv { get; set; }
dgv = new DataGridView();
:
: (いろいろプロパティ初期化)
:
データバインディング(カラム情報は、バイディング元から決定)
var bl = new BindingList<MemeMoriChar>(charListOrg);
bl.AllowEdit = true;
bl.AllowNew = false;
dgv.DataSource = bl
あとは、見栄えに応じて、DataGridViewのプロパティを調整していく。