年月日コントロールについて
- 題名: 年月日コントロールについて
- 著者: sueくん
- 日時: 2011/10/07 9:59:19
- ID: 29173
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 年月日コントロールについて
- 著者: Azulean
- 日時: 2011/10/07 11:41:00
- ID: 29175
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 年月日コントロールについて
- 著者: sueくん
- 日時: 2011/10/07 12:56:50
- ID: 29181
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 年月日コントロールについて
- 著者: sueくん
- 日時: 2011/10/07 17:24:00
- ID: 29184
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: 年月日コントロールについて
- 著者: Azulean
- 日時: 2011/10/08 0:58:47
- ID: 29186
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
お世話になります。
「Vicual C# 実践講座 絶対現場主義」丸岡孝司氏著の
WindowsアプリケーションのP.305の年月日コントロールを
試しているのですが(下記コード)
public ExTextBox()
{
InitializeComponent();
}
で、InitializeComponentは現在のコンテキスト内に存在しません。
となり、コメントアウトしてテキストボックスをテストしても
例)日付2ケタ入力しても西暦表示にかわりません。
コントロールの作成は下記URLを参考にしました。
http://kbdpage.blog82.fc2.com/blog-entry-122.html
ご指導をお願いいたします。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Project3
{
public class ExTextBox:TextBox
{
private System.ComponentModel.Container components = null;
private DateTime m_DateValue = DateTime.Now;
private bool m_isValid = false;
[Category("表示")]
[Description("日付型の値です")]
public DateTime DateValue
{
get { return m_DateValue; }
set { m_DateValue = value; }
}
[Category("表示")]
[Description("正しい日付が入力されているかの判定結果です")]
public bool IsValid
{
get { return m_isValid; }
}
public ExTextBox()
{
InitializeComponent();
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
const int WM_CHAR = 0x0102;
const int WM_PASTE = 0x0302;
const int BKSP = 0x8;
switch (m.Msg)
{
case WM_CHAR:
if (m.WParam.ToInt32() == BKSP) break;
if ((char)m.WParam.ToInt32() > '9' ||
(char)m.WParam.ToInt32() < '0')
{
return;
}
break;
case WM_PASTE:
string strPaste = Clipboard.GetDataObject().GetData(System.Windows.Forms.DataFormats.Text).ToString();
if (strPaste != null)
{
this.SelectedText = string.Empty;
for (int i = 0; i < strPaste.Length; i++)
{
if (strPaste[i] <= '9' &&
strPaste[i] >= '0')
{
this.SelectedText += strPaste[i];
}
}
return;
}
break;
}
base.WndProc(ref m);
}
private void ExDateTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
if (this.Text.Length == 0)
{
this.m_isValid = true;
return;
}
if (this.Text.Length > 8)
{
this.m_isValid = false;
return;
}
if (this.Text.Length <= 2)
{
try
{
this.m_DateValue = new DateTime(DateTime.Now.Year, DateTime.Now.Month, int.Parse(this.Text));
this.Text = this.m_DateValue.ToString("yyyyMMdd");
this.m_isValid = true;
}
catch
{
this.m_isValid = false;
}
}
else if (this.Text.Length == 3)
{
try
{
this.m_DateValue = new DateTime(DateTime.Now.Year,
int.Parse(this.Text.Substring(0, 1)),
int.Parse(this.Text.Substring(1, 2)));
this.Text = this.m_DateValue.ToString("yyyyMMdd");
this.m_isValid = true;
}
catch
{
this.m_isValid = false;
}
}
else if (this.Text.Length == 4)
{
try
{
this.m_DateValue = new DateTime(DateTime.Now.Year,
int.Parse(this.Text.Substring(0, 2)),
int.Parse(this.Text.Substring(2, 2)));
this.Text = this.m_DateValue.ToString("yyyyMMdd");
this.m_isValid = true;
}
catch
{
this.m_isValid = false;
}
}
else if (this.Text.Length == 5)
{
try
{
this.m_DateValue = new DateTime(2000 + int.Parse(this.Text.Substring(0, 1)),
int.Parse(this.Text.Substring(1, 2)),
int.Parse(this.Text.Substring(3, 2)));
this.Text = this.m_DateValue.ToString("yyyyMMdd");
this.m_isValid = true;
}
catch
{
this.m_isValid = false;
}
}
else if (this.Text.Length == 6)
{
try
{
this.m_DateValue = new DateTime(
2000 + int.Parse(this.Text.Substring(0, 2)),
int.Parse(this.Text.Substring(2, 2)),
int.Parse(this.Text.Substring(4, 2)));
this.m_isValid = true;
}
catch
{
this.m_isValid = false;
}
}
else if (this.Text.Length == 7)
{
try
{
this.m_DateValue = new DateTime(
2000 + int.Parse(this.Text.Substring(0, 3)),
int.Parse(this.Text.Substring(3, 2)),
int.Parse(this.Text.Substring(5, 2)));
this.Text = this.m_DateValue.ToString("yyyyMMdd");
this.m_isValid = true;
}
catch
{
this.m_isValid = false;
}
}
else
{
try
{
this.m_DateValue = new DateTime(
int.Parse(this.Text.Substring(0, 4)),
int.Parse(this.Text.Substring(4, 2)),
int.Parse(this.Text.Substring(6, 2)));
this.Text = this.m_DateValue.ToString("yyyyMMdd");
this.m_isValid = true;
}
catch
{
this.m_isValid = false;
}
}
}
}
}