2011-06-04 12 views
-1

私はビルド2カスタマイズコントロールを持っています。コントロールAとコントロールBフォームコントロールがどのように存在するかを知る方法

これらのコントロールは2つ以上のフォームに配置されています。

は今ものと想定ユーザーは、このコントロールのクリックイベントが呼び出されたフォームA.AndでコントロールAをクリックしてみましょうAおよびB型

からと仮定しましょう。

今では私が各内部コントロールAのイベントをハンドルのフォームA.

+0

より良い回答を提供できるよう、多くの詳細をお知らせください。 –

+0

Windowsフォームベースのアプリケーションで作業していますか?なぜA&Bコントロールが存在するフォームの外に、Aのイベントを処理したいのですか? –

答えて

0

のコントロールBの特定の属性を変更できるように制御AがフォームA.

に位置していることが確認される方法フォーム..

+0

しかし、私はこれらのイベントをどこで使用しているのかを処理しなければなりません。 –

+0

@Zain:あなたが提供している詳細レベルでは、私はよりよい解決策を提供することができません。 –

1

Control.Parentを再帰的に使用できます。また、ネストされたフォームがない場合はControl.TopLevelControlを使用できます。次に、Controlsプロパティを再帰的に参照して、2番目のコントロールを検索する必要があります。

しかし、より適切なタスクのソリューションは、最初のコントロールにプロパティを作成し、2番目のコントロールに設定してイベントハンドラで使用することです。

+0

しかし、これらはカスタマイズされたコントロールですので、親コントロールはカスタマイズされたコントロールになります。 –

+0

コントロールの親は、たとえコントロールがカスタマイズされていてもコントロールそのものにはなりませんが、とにかく目的のために「再帰的に」という言葉を使用しました。 – wRAR

0

あなたはどのバージョンのC#を使用していますか?あなたが比較的新しいバージョンを使用していて、Windows Presentation Foundation(WPF)を使用している場合は、このような何かを行うことができます。

private void ControlA_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    ((Grid)((ControlA)sender).Parent).Children 
    // The above line is INCOMPLETE, you need to select the right child, but 
    // you're at least in the right grid; The rest is up to you (depends on 
    // the setup of your program); 
} 

あり、他のハック「」最も簡単な、これまでで使用できるオプション、 。コントロールの 'タグ'プロパティを使用して、好きなものを格納することができます。たとえば、ControlBへのポインタです。これはハックされ、かつ適切な方法を自分でコントロールするカスタムのようにフィールド/変数を作成することであることを

ControlA a = new ControlA(); 
ControlB b = new ControlB(); 
a.Tag = b; 

注意。どのように動作するかは、多かれ少なかれデモです。

フォームが動的に作成されない場合、Akram Shahdaの回答は、すべてのアクションを事前定義することができるため、オプションにすぎません。それにもかかわらず、私はそのように行かないだろう。

関連する問題