- PR -

TextBoxへの文字列貼り付けを制限する方法について

投稿者投稿内容
ゴンタ
会議室デビュー日: 2004/12/20
投稿数: 4
投稿日時: 2004-12-20 13:29
初めまして。C#.NETでの開発に携わっている者です。

現在自作のTextBoxを使用しており、それを数値専用にしたくて、
文字列貼り付けが行われた際に内容チェックを行おうと試みた
のですが...。
CTRL+Vの貼り付けは認知して内容確認&制御出来たものの、
右クリックのContextMenuからの貼り付けを制御出来ません。

どなたか、ContextMenuからの貼り付けが発生した事を認知する
方法をご教授願います。

※ちなみに、CTRL+Vの貼り付けの制御については、OnKeyPress
 をオーバーライドして作成し、その中でKeyCharから判断しました。

きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-12-20 14:23
ゴンタさん、こんにちは。

未確認ですが、OnTextChanged はどうでしょう?
ゴンタ
会議室デビュー日: 2004/12/20
投稿数: 4
投稿日時: 2004-12-20 14:53
きくちゃんさん、初めまして。ご返答ありがとうございます。

きくちゃんさんがおっしゃる通り、OnTextChangedで拾ってはみたのですが、
@通常の文字入力との区別が出来ない
A文字入力の途中から貼り付けが行われた場合などは、入力済文字列と
 貼り付けられた文字列の境界が判断出来ない(?)
等幾つか問題があり、なかなかうまくいきません。

先ほどCTRL+Vの時にはOnKeyPressをオーバーライドして内部処理した、と
書きましたが、
そこでは、CTRL+Vが押下されたと判断した場合、クリップボードの中身を
確認後、貼り付ける/貼り付けないの判断を行っています。

ContextMenuからの貼り付けの場合も、可能ならば上記と同様の対応を
行いたいのですが...。
iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2004-12-20 14:56
ContextMenuをカスタマイズしては?!
_________________
IEEE-CSDP 2004-2007
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-12-20 18:24
ゴンタさん、こんばんは。

引用:

(1)通常の文字入力との区別が出来ない
(2)文字入力の途中から貼り付けが行われた場合などは、入力済文字列と
 貼り付けられた文字列の境界が判断出来ない(?)


と、いう事は、それぞれ区別する必要があるわけですね?
私は逆に、通常の文字入力もショートカットキーによる貼り付けも全部、一カ所でカバーできるんじゃないかと考えてました。
そうすると、iStationさんの提示された方法が手っ取り早いんじゃないでしょうか。
ゴンタ
会議室デビュー日: 2004/12/20
投稿数: 4
投稿日時: 2004-12-20 18:56
→きくちゃんさん

そうなんです、こっちの説明不足で申し訳無いです。
自作TextBoxですが、その中でプロパティを利用して入力タイプの
制限をかけており、その中に数値タイプがある、というわけです。

→iStationさん、きくちゃんさん

返答をもらった後、やっぱりOnMouseDownをオーバーライドして、
その中でクリップボードの中身を確認し、ContextMenuの貼り付けを
使用不可にしてみるしかないかなあ、と思ったのですが。。。

試しに自作TextBox内でContextMenuのコンストラクタを呼び出したところ、
new ContextMenu()したはずなのに、
以前と同じコンテキストメニューが右クリックで表示されてしまいました。

これってどういう事なんでしょう?ContextMenu自作って不可なんでしょうか?
(今までにContextMenu自体を編集した経験は有りません)
ContextMenu編集について、何かテクニック等ご存知であれば、教えて頂けませんか。

iStation
大ベテラン
会議室デビュー日: 2003/12/08
投稿数: 158
投稿日時: 2004-12-20 19:19
コード:

ContextMenu customContextMenu = new ContextMenu();
MenuItem mnuPaste = new MenuItem("Paste");
mnuPaste.Click += new EventHandler(mnuPaste_Click);
customContextMenu.MenuItems.Add(mnuPaste);

TextBox.ContextMenu = customContextMenu;

private void mnuPaste_Click(object sender, System.EventArgs e)
{
... your custom paste handler
}


というような実装でいかがでしょう?

[ メッセージ編集済み 編集者: iStation 編集日時 2004-12-20 20:40 ]
ゴンタ
会議室デビュー日: 2004/12/20
投稿数: 4
投稿日時: 2004-12-20 19:54
iStationさん、ありがとうございます!

教えて頂いたコードを参照して一部記述したところ、自作の
ContextMenuが表示される様になりました。
これで何とか目的は達成できると思います。

ところで、この方法はContextMenu完全自作ですが、
元々持っているContextMenuをそのまま使用して、自作TextBox内から
”貼り付けだけを使用不可にする”といったカスタマイズって
出来るのでしょうか?

よろしければ、上記についても教えて下さい(自分でもtryしたけど失敗
したので)。

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