From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。

---
 HotelPms.SourceFactory/FormValid.cs |  156 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 156 insertions(+), 0 deletions(-)

diff --git a/HotelPms.SourceFactory/FormValid.cs b/HotelPms.SourceFactory/FormValid.cs
new file mode 100644
index 0000000..a5d5c89
--- /dev/null
+++ b/HotelPms.SourceFactory/FormValid.cs
@@ -0,0 +1,156 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace HotelPms.SourceFactory
+{
+    public partial class FormValid : Form
+    {
+        /// <summary>
+        /// Validatingチェック&メッセージ表示攻略
+        /// ①CausesValidationItemを作成
+        /// ②終了ボタンのCausesValidation = falseでValidatingを一旦止める(※注意:フォーカスを離れると、Validatingは再度走る)
+        /// ③WndProcで×ボタンを押した時に、Validatingを一旦止める仕掛け this.ActiveControl = 終了ボタン;
+        /// ④FormValid_KeyDownを押した時に、Validatingを一旦止める仕掛け this.ActiveControl = 終了ボタン;
+        /// ⑤全部Validatingの先頭に下記の追加(CausesValidation = falseで一旦止めたValidatingは再度走る防止するため)
+        /// if (!CausesValidationItem(sender)) { return; }        
+        /// </summary>
+        public FormValid()
+        {
+            InitializeComponent();
+            button1.CausesValidation = true;
+           // button2.TabIndex = 0;   
+            button2.CausesValidation = false;  //終了
+        }
+
+        private bool CausesValidationItem(object sender)
+        {
+            return this.ActiveControl.CausesValidation;
+        }
+
+        private void textBox1_Validating(object sender, CancelEventArgs e)
+        {
+            if (!CausesValidationItem(sender)) { return; }
+            MessageBox.Show("textBox1_Validating");
+        }
+
+        private void textBox2_Validating(object sender, CancelEventArgs e)
+        {
+            if (!CausesValidationItem(sender)) { return; }
+            //if (!this.CausesValidation) { return; }
+            MessageBox.Show("textBox2_Validating");
+        }
+
+        private void textBox3_Validating(object sender, CancelEventArgs e)
+        {
+            if (!CausesValidationItem(sender)) { return; }
+            MessageBox.Show("textBox3_Validating");
+        }
+
+        private void textBox4_Validating(object sender, CancelEventArgs e)
+        {
+            if (!CausesValidationItem(sender)) { return; }
+            MessageBox.Show("textBox4_Validating");
+        }
+
+        private void textBox5_Validating(object sender, CancelEventArgs e)
+        {
+            System.Diagnostics.Debug.WriteLine("Raise textBox5_Validating ");
+            if (!CausesValidationItem(sender)) { return; }
+            MessageBox.Show("textBox5_Validating");
+        }
+
+        private void button2_Click(object sender, EventArgs e)
+        {
+            //Focus時、前のコントロールのValidatingを一旦止める
+
+            this.Close();   //この時点、ボタンをフォーカスを離れるので、前のコントロールのValidatingを再度走る
+        }
+
+        private void button1_Click(object sender, EventArgs e)
+        {
+            MessageBox.Show("button1_Click");
+        }
+
+        private void FormValid_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode == Keys.F1)
+            {
+                this.ActiveControl = button1;
+                button1.PerformClick();
+            }
+            else if (e.KeyCode == Keys.F12)
+            {
+                this.ActiveControl = button2;
+                button2.PerformClick();
+            }
+        }
+
+        protected override void WndProc(ref Message m)
+        {
+            //Console.WriteLine(m.Msg);
+            const int WM_SYSCOMMAND = 0x0112;
+            const int SC_CLOSE = 0xF060;
+            if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
+            {
+                //windowsの×ボタンを押すとき
+                this.ActiveControl = button2;
+            }
+            base.WndProc(ref m);
+        }
+
+        private void FormValid_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            //コントロールのValidatingの後
+            this.ActiveControl = button2;
+        }
+
+        private void textBox5_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
+        {
+            switch(e.KeyCode)
+            {
+                case Keys.Tab:
+                    //enterや、tabでボタンへフォーカスする時、まだ終了していないので、チェックすることは望ましい
+                    textBox5_Validating(sender, new CancelEventArgs());
+                    e.IsInputKey = false;
+                    break;
+            }
+        }
+
+        private void textBox5_Enter(object sender, EventArgs e)
+        {
+            textBox5.BackColor = Color.Cyan;
+        }
+
+        private void textBox5_Leave(object sender, EventArgs e)
+        {
+            textBox5.BackColor = Color.White;
+        }
+
+        private void textBox4_Enter(object sender, EventArgs e)
+        {
+            textBox4.BackColor = Color.Cyan;
+        }
+
+        private void textBox4_Leave(object sender, EventArgs e)
+        {
+            textBox4.BackColor = Color.White;
+        }
+
+        private void textBox1_Enter(object sender, EventArgs e)
+        {
+            textBox1.BackColor = Color.Cyan;
+        }
+
+        private void textBox1_Leave(object sender, EventArgs e)
+        {
+            textBox1.BackColor = Color.White;
+        }
+    }
+}

--
Gitblit v1.10.0