- PR -

テキストボックスへの文字の貼り付けを禁止

投稿者投稿内容
curel
会議室デビュー日: 2006/01/11
投稿数: 4
投稿日時: 2006-01-11 14:10
皆さんこんばんわ。
よろしくお願いします。

VB.NETでWindowsアプリケーションを開発しています。

テキストボックスへの文字の貼り付けを禁止したいのですが
コーディング方法が分かりません。

初歩的な質問で申し訳ありませんが、
どなたかご存知の方、ご教授よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-11 14:14
派生クラスを作り WndProc で WM_PASTE を握り潰すのが、
後々を考えると 1 番簡単だと思います。

[Ctrl] + [C]、[Shift] + [Insert]、コンテキスト メニューからの貼り付け、
すべてに対応できます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
清華
ベテラン
会議室デビュー日: 2005/12/21
投稿数: 50
投稿日時: 2006-01-11 15:24
ちなみにこんな感じでしょうか?
コード:
	public class NoPasteTextBox : System.Windows.Forms.TextBox
	{
		protected override void WndProc(ref Message m)
		{
			const int WM_PASTE = 0x0302;
			if(m.Msg != WM_PASTE)
				base.WndProc (ref m);
		}
		/* その他のカスタムコントロールを作成したときに自動で作られるコード */
	}
}


変更点は太字。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-11 15:33
VB.NET らしいです。

コード:

    Option Strict On

    Public Class JnTextBox : Inherits System.Windows.Forms.TextBox

      #Region " このクラスのメンバ "

        Private components As System.ComponentModel.IContainer

      #End Region

      #Region " コンストラクタ "

        Public Sub New()
            MyBase.New()
            Me.components  = New System.ComponentModel.Container()
            Me.ContextMenu = New ContextMenu()
        End Sub

      #End Region

      #Region " Dispose メソッド "

        Protected Overloads Overrides Sub Dispose(ByVal bDisposing As Boolean)
            If bDisposing = True Then
                If Not Me.components Is Nothing Then
                    Me.components.Dispose()
                End If
            End If

            MyBase.Dispose(bDisposing)
        End Sub

      #End Region

      #Region " WndProc メソッド (Overrides) "

        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
            Const WM_PASTE As Integer = &H0302

            If m.Msg = WM_PASTE Then
                Return
            End If

            MyBase.WndProc(m)
        End Sub

      #End Region

    End Class


後は、ツール ボックスの [アイテムの追加と削除] からこれを Add してください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
清華
ベテラン
会議室デビュー日: 2005/12/21
投稿数: 50
投稿日時: 2006-01-11 15:37
…orz

申し訳ない、見ていなかったです。
curel
会議室デビュー日: 2006/01/11
投稿数: 4
投稿日時: 2006-01-12 09:52
じゃんぬねっとさん、清華さん、貴重なご指摘ありがとうございます。

じゃんぬねっとさんにご教授していただいたコードについて質問があります。
これは、JnTextBoxというクラスを作成し、「アイテムの追加と削除」で
コンポーネントとして呼び出すということでしょうか?

その場合、コンポーネント?として保存する方法がよくわからないのですが
差し支えなければ教えていただけますでしょうか。

本当に初歩的な質問で恐縮ですが、よろしくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-12 10:01
引用:

curelさんの書き込み (2006-01-12 09:52) より:

その場合、コンポーネント?として保存する方法がよくわからないのですが
差し支えなければ教えていただけますでしょうか。


GAC に登録するとかそういう意味でしょうか...? (^^;)
GAC と カスタムコントロール をキーワードに検索してみてください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
清華
ベテラン
会議室デビュー日: 2005/12/21
投稿数: 50
投稿日時: 2006-01-12 10:22
いえ、たぶんカスタムコントロールの使い方が分からないのかと…

普通にじゃんぬねっとさんがお書きになられたコードを新規クラスとかでプロジェクトに追加したあとに、ビルド(カスタムコントロールを使用していない状態で)その後使えるようになってるはずです(ユーザーコントロールの欄)あくまでC#しかわかりませんが…VB.netでもできると思います。

また、外部Dllにしたいのであれば新規プロジェクトからカスタムコントロールをを選択して作成し、使う側では参照設定で読み込んであげればOkです。

_________________
9uiet Design - http://quietdesign.rental.allinoneserver.net/
デザインにこだわったソフトの配布とプログラミングTipsの公開(予定)をしています。
9uiet Blog - http://seiga.blog44.fc2.com/
笑ったことやプログラミングのことなど書�

[ メッセージ編集済み 編集者: 清華 編集日時 2006-01-12 10:23 ]

スキルアップ/キャリアアップ(JOB@IT)