0

私は2つの窓を持っています。Personボタンを押すと、現在のオブジェクトから別のオブジェクトにオブジェクトを渡したいですWindow

これは、メイン ウィンドウのコードです。

private void Button_Click(object sender, RoutedEventArgs e)
{
    person owner = new person();
    owner.ID = 1;
    owner.Name = "Mark";
    w2 newWindow = new w2(owner);

    newWindow.Show();
}

という名前の別のウィンドウw2に、次のコードがあります。

public partial class w2 : Window
{
    public class person
    {
        int _ID;
        string _Name;

        public int ID
        {
            get { return _ID; }
            set { _ID = value; }
        }
        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
   }

   public w2()
   {
       InitializeComponent();
   }

   public w2(person passedPerson) : this()
   { 
       this.passedPerson = passedPerson;
   }
}

コンパイルしようとすると、次のエラーが発生します。

エラー 3 「passing.w2」には「passedPerson」の定義が含まれておらず、「passing.w2」型の最初の引数を受け入れる拡張メソッド「passedPerson」が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか? 48 18回通過

エラー 1 'passing.w2.w2(passing.w2.person)' に最適なオーバーロードされたメソッド マッチには無効な引数があります 57 28 渡します

エラー 2 引数 1: 'passing.MainWindow.person' から 'passing.w2.person' 57 35 に変換できません

ところで。この例を出発点として使用しました。

http://go4answers.webhost4life.com/Example/pass-variables-windowopen-wpf-31068.aspx

4

5 に答える 5

1

まず、簡単な方法です。

「passing.w2」には「passedPerson」の定義が含まれていません

あなたが言う時:

this.passedPerson = passedPerson;

明らかに、その人にインスタンスフィールドを割り当てようとしていますが、そのようなフィールドはありません。1つ追加するだけです。

private person passedPerson;

person他の2つのエラーについては、各ウィンドウに1つずつ、合計2つのクラスを定義したことが原因です。あなたはそれをするべきではありません。同じ名前と同じフィールドを持つ2つのクラスがあるからといって、それらを同じクラスにするわけではなく、一方を他方であるかのように扱うことができるという意味ではありません。

トップレベルでクラスを作成personし(理想的にはそれ自体のファイルを意味します)、両方のウィンドウがその1つの定義を使用するようにします。

また、慣例により、クラス名は大文字で始まることに注意してください。

于 2013-02-27T15:19:37.040 に答える
1

渡された人の各プロパティを明示的に割り当てるようにしてください。私が言いたいのは、やってみるということです

public w2(MainForm.person passedPerson)
        : this()
{
    this.passedPerson.ID = passedPerson.ID;
    this.passedPerson.Name = passedPerson.Name;
}

Person に対して 2 つのクラスを定義した可能性があります。各フォームに 1 つずつ。

person は 1 回だけ定義する必要がありますが。(別のクラスを作成し、両方のフォームに使用します)

于 2013-02-27T14:44:03.240 に答える
0

クラス内にクラスをネストするだけでは、そのメンバーは作成されません。試す

public partial class w2 : Window
{
   private person passedPerson;
   ....
}

次に、メンバーに参照を設定します。

またはより良い: クラスの人物を他のクラスの外に置き、両方がその定義にアクセスできるようにします。

于 2013-02-27T14:44:10.037 に答える
0

あなたの「所有者」変数は w2 クラス (w2.person) で定義されたタイプ person であると確信していますか? this.passedPerson フィールドはどこに定義されていますか? まったく定義されていないようです。「親」クラスの外部で使用する場合は、内部クラスを作成しないでください。Person クラスを別のファイルに作成するだけです。

于 2013-02-27T14:44:18.587 に答える