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;
|
}
|
}
|
}
|