# 画面設計書 93-ComboBox

## 概要

本ドキュメントは、IntegrationTestAppアプリケーションにおけるComboBoxPageの画面設計書です。ComboBoxコントロールの基本機能をテストするためのページとして設計されています。

### 本画面の処理概要

**業務上の目的・背景**：本画面は、AvaloniaフレームワークにおけるComboBoxコントロールの統合テストを目的としています。ドロップダウン選択機能、選択項目の制御、WrapSelection機能（最後の項目から最初の項目への循環選択）など、ComboBoxの基本的な振る舞いが正しく動作することを検証するためのテストUIを提供します。UIオートメーションテストやE2Eテストでのコントロール操作検証に使用されます。

**画面へのアクセス方法**：IntegrationTestAppのメインウィンドウ左側のListBoxナビゲーションから「ComboBox」項目を選択することでアクセスします。

**主要な操作・処理内容**：
1. ComboBoxからアイテムを選択（Item 0 または Item 1）
2. WrapSelectionチェックボックスで循環選択の有効/無効を切り替え
3. 「Clear Selection」ボタンで選択をクリア
4. 「Select First」ボタンで最初の項目を選択

**画面遷移**：この画面はIntegrationTestAppのメインウィンドウ内のページとして表示されます。他画面への遷移機能はありません。

**権限による表示制御**：特になし。すべてのユーザーが全機能を利用可能です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 10 | ComboBox | 主機能 | ComboBoxのテスト。ドロップダウン選択、選択クリア、WrapSelection設定 |

## 画面種別

テスト・検証画面

## URL/ルーティング

デスクトップアプリケーションのため、URLルーティングはなし。MainWindowのListBoxナビゲーションから「ComboBox」を選択。

## 入出力項目

| 項目名 | 入出力 | 型 | 必須 | 説明 |
|--------|--------|-----|------|------|
| BasicComboBox | 入力 | ComboBox | - | テスト対象のComboBox。Item 0, Item 1の2項目 |
| ComboBoxWrapSelection | 入力 | CheckBox (bool) | - | WrapSelection有効化チェックボックス |
| ComboBoxSelectionClear | 入力 | Button | - | 選択クリアボタン |
| ComboBoxSelectFirst | 入力 | Button | - | 最初の項目選択ボタン |

## 表示項目

| 項目名 | コントロール名 | 説明 |
|--------|--------------|------|
| BasicComboBox | ComboBox | 2つのComboBoxItem（Item 0, Item 1）を持つドロップダウン |

## イベント仕様

### 1-ComboBoxSelectionClear_Click

**トリガー**: 「Clear Selection」ボタン押下

**処理内容**:
1. BasicComboBox.SelectedIndexを-1に設定
2. 選択状態がクリアされる

### 2-ComboBoxSelectFirst_Click

**トリガー**: 「Select First」ボタン押下

**処理内容**:
1. BasicComboBox.SelectedIndexを0に設定
2. 最初の項目（Item 0）が選択される

### 3-WrapSelectionバインディング

**トリガー**: ComboBoxWrapSelectionチェックボックスの状態変更

**処理内容**:
1. BasicComboBox.WrapSelectionプロパティへの双方向バインディング
2. チェック時：キーボードナビゲーションで最後から最初への循環が有効
3. アンチェック時：循環なし

## データベース更新仕様

### 操作別データベース影響一覧

本画面はUIコントロールのテスト用であり、データベース操作は行いません。

## メッセージ仕様

本画面ではシステムメッセージの表示はありません。

## 例外処理

本画面では例外処理は定義されていません。

## 備考

- WrapSelectionプロパティはキーボードの上下矢印キーによるナビゲーション時の動作に影響します
- SelectedIndex = -1 は「選択なし」を意味します
- ComboBoxItemは静的に2つ（Item 0, Item 1）定義されています

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

まず、ComboBoxコントロールの主要プロパティを理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | ComboBox.cs | `src/Avalonia.Controls/ComboBox.cs` | SelectedIndex、WrapSelectionプロパティの定義 |

**読解のコツ**: ComboBoxはSelectingItemsControlを継承しており、選択状態はSelectedIndexプロパティで管理されます。

#### Step 2: エントリーポイントを理解する

処理の起点となるページファイルを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | ComboBoxPage.axaml | `samples/IntegrationTestApp/Pages/ComboBoxPage.axaml` | UI構造、バインディング定義 |
| 2-2 | ComboBoxPage.axaml.cs | `samples/IntegrationTestApp/Pages/ComboBoxPage.axaml.cs` | イベントハンドラの実装 |

**主要処理フロー**:
1. **行8-11**: BasicComboBoxの定義と2つのComboBoxItem
2. **行12**: WrapSelectionへの双方向バインディング
3. **行13**: Clear Selectionボタンとイベントハンドラ
4. **行14**: Select Firstボタンとイベントハンドラ

#### Step 3: イベント処理を理解する

選択操作のイベントハンドラを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | ComboBoxPage.axaml.cs | `samples/IntegrationTestApp/Pages/ComboBoxPage.axaml.cs` | ComboBoxSelectionClear_Click、ComboBoxSelectFirst_Clickの実装 |

**主要処理フロー**:
- **行13-16**: SelectedIndexを-1に設定して選択クリア
- **行18-21**: SelectedIndexを0に設定して最初の項目を選択

### プログラム呼び出し階層図

```
ComboBoxPage
    │
    ├─ ComboBoxSelectionClear_Click
    │      └─ BasicComboBox.SelectedIndex = -1
    │
    ├─ ComboBoxSelectFirst_Click
    │      └─ BasicComboBox.SelectedIndex = 0
    │
    └─ WrapSelection バインディング
           └─ BasicComboBox.WrapSelection <─> ComboBoxWrapSelection.IsChecked
```

### データフロー図

```
[入力]                         [処理]                      [出力]

Clear Selection    ───▶  SelectedIndex = -1  ───▶  ComboBox選択クリア
ボタン押下

Select First       ───▶  SelectedIndex = 0   ───▶  Item 0が選択される
ボタン押下

WrapSelection      ───▶  WrapSelection       ───▶  キーボードナビゲーション
チェックボックス         プロパティ更新            動作変更
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| ComboBoxPage.axaml | `samples/IntegrationTestApp/Pages/ComboBoxPage.axaml` | ソース | ページのUI定義 |
| ComboBoxPage.axaml.cs | `samples/IntegrationTestApp/Pages/ComboBoxPage.axaml.cs` | ソース | ページのコードビハインド |
| MainWindow.axaml | `samples/IntegrationTestApp/MainWindow.axaml` | ソース | メインウィンドウとナビゲーション |
| MainWindow.axaml.cs | `samples/IntegrationTestApp/MainWindow.axaml.cs` | ソース | ページ生成ファクトリ（行82） |
