1

私の意図は、コンストラクターのモードパラメーターに応じて、LabelまたはTextFieldのように動作するLabelOrTextUserControlを作成することでした。UserControlにはTextプロパティがあり、LabelとTextFieldが含まれていますが、一度に表示できるのは両方の1つだけです。したがって、どのアプリケーションソースでも、ソースコードを変更せずにすべてのラベルとすべてのTextFieldをLabelOrText UserControlに置き換えることができます...(もちろん、Textプロパティは表示されている内部コントロールに委任されるだけでなく、FontプロパティとBackColorプロパティと他のすべてのプロパティは、表示されている内部コントロールに委任されます...)

これは、DragOverイベントとDragDropイベントが期待どおりに機能しないことを除いて、正常に機能します。

-> LabelOrText1.DragDrop +=myDDHandlerはLabel1.DragDrop+=myDDHandlerのように機能する必要があります

-> LabelOrText1.DragOver +=myDOHandlerはLabel1.DragOver+=myDOHandlerのように機能する必要があります

->マウスを使用した内側のラベルのDragOverアクションは、myDOHandler(o、e)を呼び出す必要があります

->マウスを使用した内側のラベルでのDragDropアクションは、myDDHandler(o、e)を呼び出す必要があります


そのため、アプリケーションのソースコードでラベルコントロールを私のLabelOrTextUserControlに置き換えるのは本当に簡単です。


ドラッグイベントを内部コントロールからUserControlを介して透過的にルーティングする方法に関するアイデアは高く評価されます。

4

1 に答える 1

1

テキストボックスだけでも問題ないように聞こえますが、親コンテナでドラッグドロップを処理する場合は、label、text、selfのDragDropイベントを親/自己に設定するだけです。

親クラスのイベントを接続することでこれを透過的に行うことができ、非常に簡単なはずです。

親オブジェクトCTORまたは他の場所

//psuedocode
label.DragDrop += parentEvent;  //aggregate object
text.DragDrop += parentEvent;
DragDrop += parentEvent;

私はこれをパネルで行いました。押したりドラッグしたりすると、すべてが指/マウスに追従してスクロールします。パン。

于 2012-12-13T04:40:22.790 に答える