2016-08-28 28 views
0

私は2つのフォーム間でデータを受け渡すのに苦労しています。Form1にはテキストボックスがあり、Form2にあるtextbox1にはテキストボックスの値が表示されます。 WPFを使用して、これについてどうすればいいですか?かなりのソリューションを見てきましたが、それらのいずれかを稼働させることはできません。C#フォーム間でのデータの受け渡し

namespace test 
{ 
    /// <summary> 
    /// Interaction logic for OptionDisplayWindow.xaml 
    /// </summary> 
    public partial class OptionDisplayWindow : Window 
    { 
     public OptionDisplayWindow() 
     { 

      InitializeComponent(); 
      tbd.Text = "k"; //want to change this value based on "s" in the other form 

     } 

テキストがから転送された形態(表示したい:私は(tbd.Textで)値を表示したいよれる形態については

は、ここにコードがあります文字列):

public void Button1_Click(object sender, RoutedEventArgs e) 
     { 
      string s = "testText" 


     } 

私はSOのすべての単一の他の回答を試してみました(しようとして過去6時間を費やし)と全く運がなかったです。

EDIT 2:ただし

 public string TheValue 
     { 
      get { return arrayTest.Text; } 
     } 

、:

private void ttbtn_Click(object sender, RoutedEventArgs e) 
     { 
      using (Form2 form2 = new Form2()) 
      { 
       tbd.Text = form2.TheValue; 
       } 
      } 

とForm2のためのコード:ここでは最良の答えSend values from one form to another formとして記載されている方法を使用して、私はForm1のこのコードを作ってみました私はエラー 'フォーム2'を使用しています:usingステートメントで使用される型は暗黙的に 'System.IDisposable'に変換可能でなければなりません。

+0

コードを投稿しない限り、これは終了します。 –

+0

申し訳ありません、新しいので、分私を与える! – user3879060

+1

@ user3879060実際にはこれに関する多くのチュートリアルがあります:http://stackoverflow.com/questions/1559770/send-values-from-one-form-to-another-form googleからの最初の結果 – User2012384

答えて

2

サンプルプロジェクトに入れたコード(コメントにリンクとして提供したコード)を質問に入れる必要があります。あなたがしようとしていることを理解し、実行可能なソリューションを提供することがはるかに容易になることを考えれば、

私は "DataTransferObject"を作成し、各フォームの間に渡すことをお勧めします。

public class Dto 
{ 
    public string Text; 
} 

MainWindowのコードは次のようになります。

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     var dto = new Dto(); 
     window2 win2 = new window2(); 
     win2.Dto = dto; 
     win2.ShowDialog(); 
     textBox1.Text = dto.Text; 
    } 

そしてwindow2のコードは次のようになります。

一つの方法がある
public Dto Dto; 

    private void textBox2_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     if (this.Dto != null) 
     { 
      this.Dto.Text = textBox2.Text; 
     } 
    } 

- のうち、約百万 - フォーム間でデータを転送します。データ転送オブジェクトを使用する利点は、UIからデータを分離することから始まることです。これは一般的には非常に良いことです。

+0

ありがとうございます。私は実際に他の方法でデータを渡そうとしていましたが(申し訳ありません)、これを行うようにしましたが、2番目のウィンドウに空のボックスしか表示されません(Dtoは常にnullなので、これを変更するように見えることはできません)。変更しようとする私の恐ろしい試行で、更新されたコードがあります:/。 http://s000.tinyupload.com/index.php?file_id=45688752685779824697 – user3879060

+0

@ user3879060 - アップロードしたファイルは、ダウンロードすると「このファイルにはウイルスやマルウェアが含まれています」というメッセージが表示されます。どちらの場合でも、「Dto」は問題なく両方の方法で動作することができます。 – Enigmativity

+0

申し訳ありません、ここで私が行ったことのスクリーンショットhttp://imgur.com/a/qAmJL dtoはnullのまま残り、したがってwindow2テキストボックスには転送されません。 – user3879060

1

フォーム間でデータを渡すもう1つの簡単な方法は、アプリケーションの設定を使用することです。

ステップ1:、これは設定ページに移動します

「...テストプロパティ」を「プロジェクト」メニューを開き、選択、設定を作成し、それはしかし、あなたがしたい設定名を作成して、私が命名します私は "PassString"を入力し、それが文字列型で、Scopeがuserに設定されていることを確認してください。

ステップ2.あなたのtextbox.textプロパティに設定する文字列を設定することができます、コードにこれらの変更を追加します。

private void button1_Click(object sender, RoutedEventArgs e) 
{ 
    Properties.Settings.Default.PassString = textBox1.Text; 
    window2 win2 = new window2(); 
    win2.ShowDialog(); 
} 

ステップ3.更新し、2番目のウィンドウの初期化プロセス上のテキスト。

public OptionDisplayWindow() 
    { 
     InitializeComponent(); 
     tbd.Text = Properties.Settings.Default.PassString; 
    } 

P.S.アプリケーション設定に到達するための参照を追加する必要があります。

using test.Properties;     
+0

ありがとう:D。 複数の変数でそのメソッドを使用する方法はありますか、それぞれに異なる設定を作成する必要はありますか?例えば。フォームにtextBox1とtextBox2があって、それぞれを2番目のウィンドウの変数に渡したい場合 – user3879060

+0

多くのタイプの設定があります。この例では、好きなときに設定または取得した文字列を単純に渡します。正確にはどういう意味ですか? –

関連する問題