2011-11-09 22 views
1

wpfアプリケーションに2つのユーザーコントロールがあります。私のユーザコントロールAでは、ボタンをクリックすると、ユーザコントロールBからテキストボックス内のテキストを取得します.Aのボタンをクリックすると、テキストボックスのテキストにアクセスするにはどうすればよいですか?ユーザーコントロール間の相互作用

public partial class UserControlB : UserControl 
    { 
     public string TextBoxText { get { return this.TextBoxB.Text; } } 
    } 

は、次にユーザーコントロールAで、私はボタンをクリックしたときに

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     String s = UserControlB.TextBoxText ; 

    } 
+0

コントロールが互いにアクセス可能な場合(修飾子を確認)、オブジェクトを使用して値を取得します。オブジェクトにアクセスできない場合は、ターゲットコントロールを検索してみてください。 – Nayan

+0

修飾子を確認するにはどうすればよいですか? – edelweiss

+0

私は、問題のコントロールが "public"か "private/protected"であるかどうかを確認しました。 「public」の場合は、オブジェクトに直接アクセスできます。 – Nayan

答えて

2

は、テキストボックスのテキストを返し、Bでプロパティを追加します。

public class UserControlB 
{ 
    public string TextBoxText { get { return this.TextBox1.Text; } } 
} 

は、ユーザーコントロールのインスタンスを探しますBをあなたのxamlに入れ、次にプロパティを呼び出します:

string txt = this.UserControlB.TextBoxText; 
+0

私はusercontrolBでこれを行いましたが、usercontrolA側では、C#コードからテキストボックスにアクセスできません。それは非静的なフィールドのメソッドまたはプロパティのためのオブジェクト参照が必要だと言います – edelweiss

+0

@edelweissあなたのコードを教えてください。 – ojlovecd

+0

静的フィールドと非静的フィールドが混在しているようです。コードしてください! – Nayan

0

これは簡単な答えですが、私はFindControl( "textboxName")が動作するはずだと思います。

文字列text = userControlB.FindControl( "テキストボックス")あなたが正しくあなたは、UserControlB呼ばクラスではない見ているここにあなたのUserControlB

private void button1_Click(object sender, RoutedEventArgs e)  
{ 
    String s = UserControlB.TextBoxText ;  
} 

を参照していない、あなたの質問に

0

オブジェクトまたはインスタンスUserControlBです。つまり、と指定していないので、UserControlBです。あなたの画面にUserControlBが5つあった場合、どのボタンを使用するのか、ボタンはどのようにしてわかりますか?

読むClasses and Objectsは(UserControlBのような)クラスとオブジェクト(あなたがあなたのプログラムで参照し、使用できるアイテム)との違いを学びます。

あなたがページまたは閲覧しているUserControlBには、使用する場合はNameが必要です。あなたが名前を見つけたら、このようにそれを参照することができます。

// inside the control which contains your UserControlB 
public MainPage() 
{ 
    // find it according to its Name property 
    UserControlB theOneIWantToUse = this.UserControlB_1; 

    // once you identify it, you can get the Text value from it 
    String s = theOneIWantToUse.Text; 
} 
+0

あなたはその型と同じ名前のインスタンスを持っているかもしれません。その場合、私は目標を外していますが、それは悪い悪いです! –

+0

申し訳ありませんが、UserControlB_1は何を参照していますか?ユーザーコントロールの名前? – edelweiss

+0

@edelweissはい、コントロールの 'Name'プロパティが何に設定されていても。 –

0

あなたがこの試すことができます:ユーザーコントロールA、

ます。private voidのbutton1_Click(オブジェクト送信者、RoutedEventArgs e)の で

を{

MainWindow rootWindow = Application.Current.MainWindow as MainWindow; 
    String s = (String)rootWindow.B.TextBoxB.text; 

}

+0

Bは何を参照していますか? – edelweiss

+0

Bはあなたの質問で言ったように、2番目のUserControlの名前です。同様に、TextBoxBは、UserControl Aから読み取るUserControl BのTextBoxです。 – r3st0r3

+0

これを試しましたか?それは動作しましたか? – r3st0r3

関連する問題