ホテル管理システム
ogi
yesterday 1a1c8e71fcd14858f595029f089b2d4a00202b32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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;
        }
    }
}