3

form1button btnInvoke呼び出す がありますform2form2とが含まれてtextboxbutton btn2ます。

ユーザーは にデータを入力してtextboxを押す必要がありbtn2ます。

btn2をクリックするform2と に送信textbox dataする必要がありますform1

コンストラクターを通過しようとしましたが、の新しいインスタンスを開始できませんform1

何をすればよいでしょうか?

4

4 に答える 4

10

使用できる方法は 2 つあります。その最初の方法は、ShowDialog とパブリック メソッドを使用し、DialogResult が true であることをテストしてから、メソッドから値を読み取ることです。

すなわち

if (newWindow.ShowDialog() == true)
            this.Title = newWindow.myText();

2 番目の方法は、CustomEvent を作成し、作成ウィンドウでこのようにサブスクライブすることです。

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Window1 newWindow = new Window1();
        newWindow.RaiseCustomEvent += new EventHandler<CustomEventArgs>(newWindow_RaiseCustomEvent);
        newWindow.Show();

    }

    void newWindow_RaiseCustomEvent(object sender, CustomEventArgs e)
    {
        this.Title = e.Message;
    }
}

Window1.xaml.cs

public partial class Window1 : Window
{
    public event EventHandler<CustomEventArgs> RaiseCustomEvent;

    public Window1()
    {
        InitializeComponent();
    }
    public string myText()
    {
        return textBox1.Text;
    }
    private void button1_Click(object sender, RoutedEventArgs e)
    {

        RaiseCustomEvent(this, new CustomEventArgs(textBox1.Text));
    }
}
public class CustomEventArgs : EventArgs
{
    public CustomEventArgs(string s)
    {
        msg = s;
    }
    private string msg;
    public string Message
    {
        get { return msg; }
    }
}
于 2013-01-21T08:03:47.347 に答える
1

それはやり過ぎかもしれませんが、EventAggregatorここでは良い解決策かもしれません。form1からサブスクライブできるイベントを発生させることができますform2

https://stackoverflow.com/questions/2343980/event-aggregator-implementation-sample-best-practicesEventAggregatorに実装の詳細と例がいくつかあります。

于 2013-01-21T07:52:41.570 に答える
1

form1パブリック プロパティを定義します。

public string MyTextData { get; set; }

form2ボタンのクリックで、のインスタンスを取得し、そのform1 プロパティを TextBox 値に設定します。

var frm1 = Application.Current.Windows["form1"] as Form1;
if(frm1 ! = null)
    frm1.MyTextData  = yourTextBox.Text;

あなたForm1のプロパティでテキストを取得しますMyTextData

ウィンドウに名前を付けるための規則に従っているとよいでしょう。WPF でウィンドウに名前を付けるWindow代わりに使用します。Form通常、フォームは WinForm アプリケーションで使用されます。

于 2013-01-21T07:20:49.723 に答える
0

WPF を使用しているため、CommandBindingsMessagingを使用します。また、MVVM フレームワークを詳しく調べることをお勧めします。私はMVVM Light Toolkitを優先します。フレームワークのハウツーはたくさんあります。Google に聞いてください。

于 2013-01-21T08:09:39.677 に答える