C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■96310 / )  Re[3]: テキストボックスの文字数の制限を超えたらクリアしたい
□投稿者/ KOZ (150回)-(2020/11/10(Tue) 17:27:51)
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;
            }
        }
    }
}

返信 編集キー/


管理者用

- Child Tree -