ゲーム性……。 —
http://togetter.com/li/447128
よく使っちゃうけども。カタカナ語に「性」つけるとあっという間に定義がgdgdになるよね……。
http://togetter.com/li/447128 よく使っちゃうけども。カタカナ語に「性」つけるとあっという間に定義がgdgdになるよね……。
TRPGについていろいろ書いたり。ツールとか置いてあったり。
http://togetter.com/li/447128
よく使っちゃうけども。カタカナ語に「性」つけるとあっという間に定義がgdgdになるよね……。
http://togetter.com/li/447128 よく使っちゃうけども。カタカナ語に「性」つけるとあっという間に定義がgdgdになるよね……。
入力検証時にバルーンを出す方法とか、ウォーターマークを出す方法とかをちょっと調べたりしたんでメモとして。
とりあえず動けばいいって感じなんでコードは適当。
using System;
using System.ComponentModel;
using System.Drawing.Design;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace example
{
///
/// 正規表現で入力制御したり、ウォーターマークを表示できるテキストボックス
///
public class CustomTextBox : TextBox
{
private const int ECM_FIRST = 0x1500;
private const int EM_SETCUEBANNER = ECM_FIRST + 1;
private const int EM_SHOWBALLOONTIP = ECM_FIRST + 3;
private const int EM_HIDEBALLOONTIP = ECM_FIRST + 4;
private const int Win32False = 0;
private const int Win32True = 1;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, string lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern bool SendMessage(IntPtr hWnd, int Msg, int wParam, ref EDITBALLOONTIP lParam);
[StructLayout(LayoutKind.Sequential)]
private struct EDITBALLOONTIP
{
public int cbStruct;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszTitle;
[MarshalAs(UnmanagedType.LPWStr)]
public string pszText;
public int ttiIcon;
}
private enum BalloonIcon
{
ShowNone = ToolTipIcon.None,
ShowInformation = ToolTipIcon.Info,
ShowWarning = ToolTipIcon.Warning,
ShowError = ToolTipIcon.Error
}
// 概要:
// CustomTextBox クラスの新しいインスタンスを初期化します。
public CustomTextBox()
{
}
///
/// 入力可能な文字列を正規表現で指定
///
[RefreshProperties(RefreshProperties.Repaint)]
[Category("動作")]
[DefaultValue(".")]
[Description("入力可能な文字を正規表現で指定します。")]
[Localizable(true)]
public string ValidateCharRegex { get; set; }
///
/// 入力可能な文字列の説明を指定
///
[RefreshProperties(RefreshProperties.Repaint)]
[Category("動作")]
[DefaultValue("入力できる文字が制限されています。")]
[Description("エラーメッセージに利用される、入力可能な文字の説明を指定します。")]
[Localizable(true)]
public string ValidateErrorMessage { get; set; }
///
/// ウォーターマークとして表示する文字列を指定
///
[Category("表示")]
[DefaultValue("")]
[Description("テキストが空の場合に表示する文字列を設定または取得します。")]
public string Watermark { get; set; }
///
/// ウォーターマークを設定する(Windows Vista以降のみ)
///
private void SetWatermark()
{
SendMessage(this.Handle, EM_SETCUEBANNER, Win32False, this.Watermark);
}
///
/// ハンドルが生成された直後のイベント
///
///
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
// ウォーターマークを設定するためにはハンドルが必要。
this.SetWatermark();
}
///
/// キーが押された場合のイベント
///
///
protected override void OnKeyPress(KeyPressEventArgs e)
{
// 指定された正規表現に一致しない場合、入力をキャンセルする
if (!Regex.IsMatch(e.KeyChar.ToString(), this.ValidateCharRegex) && e.KeyChar != '\b')
{
base.OnKeyPress(e);
EDITBALLOONTIP balloontip = new EDITBALLOONTIP();
balloontip.cbStruct = Marshal.SizeOf(balloontip);
balloontip.ttiIcon = (int)BalloonIcon.ShowError;
balloontip.pszTitle = "入力できない文字です";
balloontip.pszText = ValidateErrorMessage;
SendMessage(this.Handle, EM_SHOWBALLOONTIP, Win32False, ref balloontip);
e.Handled = true;
}
}
}
}
入力検証時にバルーンを出す方法とか、ウォーターマークを出す方法とかをちょっと調べたりしたんでメモとして。 とりあえず動けばいいって感じなんでコードは適当。 using System; using System.Compo […]