|
■No96288 (とんかつ さん) に返信
> 基本的な使い方はクリップボードから英数字10文字のコピペの繰り返しです。
> 次をコピペした時に以前の文字列がクリアされれば問題ありません。
こんな感じでどうでしょう?
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
class TextBoxEx : TextBox
{
const int WM_CHAR = 0x0102;
const int WM_PASTE = 0x0302;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_CHAR:
if (!Char.IsControl((char)m.WParam))
{
if (TextLength >= 10)
{
this.Clear();
}
}
base.WndProc(ref m);
break;
case WM_PASTE:
if (Clipboard.ContainsText())
{
var ctx = Clipboard.GetText();
foreach (var c in ctx)
{
SendMessage(this.Handle, WM_CHAR, (IntPtr)c, (IntPtr)1);
}
}
break;
default:
base.WndProc(ref m);
break;
}
}
}
}
|