form1
をbutton btnInvoke
呼び出す がありますform2
。form2
とが含まれてtextbox
いbutton btn2
ます。
ユーザーは にデータを入力してtextbox
を押す必要がありbtn2
ます。
btn2
をクリックするform2
と に送信textbox data
する必要がありますform1
。
コンストラクターを通過しようとしましたが、の新しいインスタンスを開始できませんform1
。
何をすればよいでしょうか?
使用できる方法は 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; }
}
}
それはやり過ぎかもしれませんが、EventAggregator
ここでは良い解決策かもしれません。form1
からサブスクライブできるイベントを発生させることができますform2
。
https://stackoverflow.com/questions/2343980/event-aggregator-implementation-sample-best-practicesEventAggregator
に実装の詳細と例がいくつかあります。
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 アプリケーションで使用されます。
WPF を使用しているため、CommandBindingsとMessagingを使用します。また、MVVM フレームワークを詳しく調べることをお勧めします。私はMVVM Light Toolkitを優先します。フレームワークのハウツーはたくさんあります。Google に聞いてください。