トップ回答者
フレーム内のページからメインフォーム配置のコントロールを変更する方法

質問
-
VisualStudio2013でアプリケーションを作成しております。
ウインドウ(WPF)に表示用のLabelと画面切替用のFrameコントロールを配置しています。
・MainForm.xaml(ウインドウWPF)
<Label Name="Label1" Content="AAA"/>
<Frame Name="MainFrame">
・Page1.xaml(ページWPF)
(質問)
Page1.xamlからMainForm.xamlに配置のLabelのContentを変更したいのですが変更できません。
Page1.xaml のボタンイベントに下記を記述
Dim frm AS New MainForm
frm.Label1.Content = "BBB"
としてもMainFormのLabelがBBBに書き換わりません。
基本的な問題で大変申し訳ありませんが、どなたかご教授よろしくお願いいたします。
回答
-
こんにちは。
以下を参考に試してみてはどうでしょうか。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/9dc929cf-38dd-4abd-9baf-a7f44ee4dd7f/wpf-child-page-get-parent-frame-vbnet?forum=wpfClass Page1 Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim parent = TryCast(Application.Current.MainWindow, MainWindow) If parent IsNot Nothing Then parent.Label1.Content = "BBB" End If End Sub End Class
Window.GetWindow(Me)でも取得できます。
- 編集済み Tak1waMVP, Moderator 2015年10月29日 6:19
- 回答の候補に設定 星 睦美 2015年10月30日 2:09
- 回答としてマーク 星 睦美 2015年12月3日 8:27
-
基本的なオブジェクト指向の概念であるインスタンスの理解が不足しているようです。
Dim frm AS New MainForm
としてしまうと、今表示しているMainFormとは別のMainFormが作成されます。Showメソッドを実行していないので、このMainFormは表示されていません。つまり、
今表示されているMainFormのインスタンスと、今作成した表示されていないMainFormのインスタンスの2つが存在することになります。frm.Label1.Content = "BBB"
は、後者のインスタンスに対する操作ですので、今表示されているMainFormには何ら変化がないのです。
よって、ボタンをクリックした際に、今表示しているMainFormを見つけ、そこにあるLabelのContentを変更する必要があります。例えば、以下のようにすると良いでしょう。GetWindowでPage1が含まれるWindowを得て、そこにあるLabel1に値をセットしています。DirectCast(Window.GetWindow(Me), MainForm).Label1.Content = "BBB"
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
すべての返信
-
こんにちは。
以下を参考に試してみてはどうでしょうか。
https://social.msdn.microsoft.com/Forums/vstudio/en-US/9dc929cf-38dd-4abd-9baf-a7f44ee4dd7f/wpf-child-page-get-parent-frame-vbnet?forum=wpfClass Page1 Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim parent = TryCast(Application.Current.MainWindow, MainWindow) If parent IsNot Nothing Then parent.Label1.Content = "BBB" End If End Sub End Class
Window.GetWindow(Me)でも取得できます。
- 編集済み Tak1waMVP, Moderator 2015年10月29日 6:19
- 回答の候補に設定 星 睦美 2015年10月30日 2:09
- 回答としてマーク 星 睦美 2015年12月3日 8:27
-
基本的なオブジェクト指向の概念であるインスタンスの理解が不足しているようです。
Dim frm AS New MainForm
としてしまうと、今表示しているMainFormとは別のMainFormが作成されます。Showメソッドを実行していないので、このMainFormは表示されていません。つまり、
今表示されているMainFormのインスタンスと、今作成した表示されていないMainFormのインスタンスの2つが存在することになります。frm.Label1.Content = "BBB"
は、後者のインスタンスに対する操作ですので、今表示されているMainFormには何ら変化がないのです。
よって、ボタンをクリックした際に、今表示しているMainFormを見つけ、そこにあるLabelのContentを変更する必要があります。例えば、以下のようにすると良いでしょう。GetWindowでPage1が含まれるWindowを得て、そこにあるLabel1に値をセットしています。DirectCast(Window.GetWindow(Me), MainForm).Label1.Content = "BBB"
★良い回答には回答済みマークを付けよう! MVP - .NET http://d.hatena.ne.jp/trapemiya/
-