# マスタ検索画面「戻る」ボタン挙動修正手順書
## 概要
マスタ検索画面の「戻る」ボタンを押下した際に、確認メッセージを表示せずに前の画面に遷移するように修正します。ただし、入力画面から保存せずに遷移しようとしたときは、引き続き確認メッセージを表示します。
## 現状の動作
### 検索画面(マスタ一覧画面)
- **顧客マスタ画面(M_CustomerMaster)**:FormClosingイベントで確認メッセージが表示される
- **送信パターンマスタ画面(M_SendPatternMaster)**:FormClosingイベントで確認メッセージが表示される
- **送信者情報マスタ画面(M_SenderMaster)**:同様の実装と推測される
### 個別編集画面(入力画面)
- **顧客マスタ個別編集画面(M_CustomerMasterIndividualEdit)**:FormClosingイベントで確認メッセージが表示される(これは維持)
- **送信パターン個別編集画面(M_SendPatternIndividualEdit)**:同様の実装と推測される
## 修正方針
### 方針
1. 検索画面の「戻る」ボタンクリック時は、FormClosingイベントでの確認メッセージをスキップする
2. ×ボタンやAlt+F4での終了時は引き続き確認メッセージを表示する
3. 個別編集画面の確認メッセージは変更しない(保存確認のため維持)
### 実装方法
フラグ変数を使用して、「戻る」ボタンからの終了かどうかを判定します。
## 実装手順
### ステップ1: M_CustomerMaster.csの修正
#### 1.1 フラグ変数の追加
クラスのメンバー変数として、戻るボタンからの終了を示すフラグを追加します。
```csharp
public partial class M_CustomerMaster : Form
{
public event EventHandler BtnSearchClicked;
private SearchBoxControl _searchBoxControl = null;
private CustomerDgvControl _customerDgvControl = null;
private BtnAddMasterControl _btnControl = null;
private CustomerMasterDto _dto = new CustomerMasterDto();
// 追加:戻るボタンからの終了フラグ
private bool _isReturnButtonClicked = false;
```
#### 1.2 BtnReturn_Clickメソッドの修正
戻るボタンクリック時にフラグを設定します。
```csharp
private void BtnReturn_Click(object sender, EventArgs e)
{
// 戻るボタンからの終了であることを示すフラグを設定
_isReturnButtonClicked = true;
this.Close();
}
```
#### 1.3 FormClosingイベントの修正
フラグをチェックして、戻るボタンからの終了の場合は確認メッセージをスキップします。
```csharp
private void M_CustomerMaster_FormClosing(object sender, FormClosingEventArgs e)
{
// 戻るボタンからの終了の場合は確認メッセージをスキップ
if (!_isReturnButtonClicked)
{
DialogResult result = MessageBox.Show("顧客マスタ画面を終了してもよろしいですか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
{
e.Cancel = true;
return;
}
}
// イベントの登録を解除
_btnControl.BtnReturnClicked -= this.BtnReturn_Click;
// 明示的に解放する
DisposeViewControls();
if (this.Owner != null)
{
// 設定メニューを表示する
this.Owner.Show();
// 再描写を行う
this.Owner.Refresh();
}
}
```
### ステップ2: M_SendPatternMaster.csの修正
#### 2.1 同様の修正を実施
M_CustomerMasterと同じパターンで修正します。
1. フラグ変数の追加
2. BtnReturn_Clickメソッドでフラグを設定
3. FormClosingイベントでフラグをチェック
### ステップ3: M_SenderMaster.csの修正
#### 3.1 同様の修正を実施
他のマスタ画面と同じパターンで修正します。
## テストシナリオ
### シナリオ1: 戻るボタンからの終了
1. 各マスタ検索画面を開く
2. 「戻る」ボタンをクリック
3. 確認メッセージが表示されずに画面が閉じることを確認
4. 前の画面(メニュー画面)に正しく戻ることを確認
### シナリオ2: ×ボタンからの終了
1. 各マスタ検索画面を開く
2. ウィンドウの×ボタンをクリック
3. 確認メッセージが表示されることを確認
4. 「いいえ」を選択して画面が閉じないことを確認
5. 「はい」を選択して画面が閉じることを確認
### シナリオ3: Alt+F4からの終了
1. 各マスタ検索画面を開く
2. Alt+F4キーを押下
3. 確認メッセージが表示されることを確認
### シナリオ4: 個別編集画面の動作確認
1. 個別編集画面を開く
2. 「戻る」ボタンをクリック
3. 確認メッセージが表示されることを確認(変更なし)
## 実装の注意点
### 1. フラグのリセット
フラグは一度設定されたら、そのフォームインスタンスの生存期間中は変更されません。これは問題ありません(フォームは閉じられるため)。
### 2. イベントハンドラの登録解除
FormClosingイベント内でのイベントハンドラの登録解除は、フラグの値に関わらず必ず実行されます。
### 3. リソースの解放
DisposeViewControlsメソッドの呼び出しも、フラグの値に関わらず必ず実行されます。
## 実装チェックリスト
### M_CustomerMaster.cs
- [ ] フラグ変数(_isReturnButtonClicked)の追加
- [ ] BtnReturn_Clickメソッドでフラグを設定
- [ ] FormClosingイベントでフラグをチェック
- [ ] コンパイルエラーがないことを確認
### M_SendPatternMaster.cs
- [ ] フラグ変数(_isReturnButtonClicked)の追加
- [ ] BtnReturn_Clickメソッドでフラグを設定
- [ ] FormClosingイベントでフラグをチェック
- [ ] コンパイルエラーがないことを確認
### M_SenderMaster.cs
- [ ] フラグ変数(_isReturnButtonClicked)の追加
- [ ] BtnReturn_Clickメソッドでフラグを設定
- [ ] FormClosingイベントでフラグをチェック
- [ ] コンパイルエラーがないことを確認
### 動作確認
- [ ] 各マスタ画面で「戻る」ボタンから終了時に確認メッセージが表示されないこと
- [ ] 各マスタ画面で×ボタンから終了時に確認メッセージが表示されること
- [ ] 個別編集画面の動作に変更がないこと
## 代替案
### 代替案1: ボタンコントロール内で処理
BtnAddMasterControl内で、戻るボタンクリック時に親フォームのFormClosingイベントを一時的に無効化する方法も考えられますが、実装が複雑になるため推奨しません。
### 代替案2: カスタムイベント
独自の終了イベントを定義する方法もありますが、既存の構造を大きく変更する必要があるため推奨しません。
## まとめ
この修正により、マスタ検索画面での操作性が向上します。「戻る」ボタンをクリックした際に毎回確認メッセージが表示されることがなくなり、よりスムーズな画面遷移が可能になります。一方で、誤操作による終了を防ぐため、×ボタンやAlt+F4での終了時は引き続き確認メッセージを表示します。