質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1108閲覧

ウィンドウ間でのやりとり

Tetsu21

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

1グッド

0クリップ

投稿2021/10/13 15:03

前提・実現したいこと

C#でToDoアプリ的な物を作ろうとしているのですが、メインウィンドウから呼び出したサブウィンドウに入力したテキストをメインウィンドウのlistboxに渡して、サブウィンドウを閉じればメインウィンドウのlistboxにテキストが表示されているという状態を想像していたのですが何も表示されません。

サブウィンドウの入力情報をメインウィンドウのlistboxにaddして、サブウィンドウを閉じればメインウィンドウのlistboxに追加されて表示されているという物にしたいです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

c#```ここに言語名を入力
ソースコード

private

1 { 2 if (String.IsNullOrWhiteSpace(mainText.Text)) 3 { 4 MessageBox.Show("文字を入力してください"); 5 6 mainText.Focus(); 7 } 8 else 9 { 10 11 MainWindow win = new MainWindow(); 12 13 win.listBox.Items.Add(mainText.Text + "/" + subText.Text); 14 15 mainText.Clear(); 16 subText.Clear(); 17 18 this.DialogResult = true; 19 } 20 } 21 22 23### 試したこと 24サブウィンドウからインスタンス化したメインウィンドウをshowdialogメソッドを使って呼ぶと、showdialogメソッドで表示されたメインウィンドウのlistboxにはキチンと表示されていますが、メインウィンドウが二個ある状態になってしまうので思っているのと違うようになってしまいます。 25 26### 補足情報(FW/ツールのバージョンなど) 27 28ここにより詳細な情報を記載してください。
TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

MainWindowSubWindowShowDialogしてるんですよね?
だったらMainWindow側でAddすればいいんじゃないですか。

MainWindow

xml

1<Window 2 x:Class="Questions364277.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Title="MainWindow" 6 Width="800" 7 Height="450"> 8 <DockPanel> 9 <Button 10 Click="AddButton_Click" 11 Content="追加..." 12 DockPanel.Dock="Top" /> 13 <ListBox x:Name="listBox" /> 14 </DockPanel> 15</Window>

cs

1using System.Windows; 2 3namespace Questions364277 4{ 5 public partial class MainWindow : Window 6 { 7 public MainWindow() => InitializeComponent(); 8 9 private void AddButton_Click(object sender, RoutedEventArgs e) 10 { 11 var sub = new SubWindow { Owner = this, }; 12 13 if (sub.ShowDialog() == true) 14 { 15 listBox.Items.Add(sub.mainText.Text + "/" + sub.subText.Text); 16 } 17 } 18 } 19}

SubWindow

xml

1<Window 2 x:Class="Questions364277.SubWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Title="SubWindow" 6 Width="400" 7 FocusManager.FocusedElement="{Binding ElementName=mainText}" 8 SizeToContent="Height" 9 WindowStartupLocation="CenterOwner"> 10 <StackPanel> 11 <TextBlock Margin="5,0" Text="メインテキスト" /> 12 <TextBox x:Name="mainText" Margin="5,0" /> 13 <TextBlock Margin="5,0" Text="サブテキスト" /> 14 <TextBox x:Name="subText" Margin="5,0" /> 15 16 <StackPanel HorizontalAlignment="Right" Orientation="Horizontal"> 17 <Button 18 MinWidth="80" 19 Margin="5" 20 Click="AddButton_Click" 21 Content="追加" 22 IsDefault="True" /> 23 <Button 24 MinWidth="80" 25 Margin="5" 26 Content="キャンセル" 27 IsCancel="True" /> 28 </StackPanel> 29 </StackPanel> 30</Window>

cs

1using System.Windows; 2 3namespace Questions364277 4{ 5 public partial class SubWindow : Window 6 { 7 public SubWindow() => InitializeComponent(); 8 9 private void AddButton_Click(object sender, RoutedEventArgs e) 10 { 11 if (string.IsNullOrWhiteSpace(mainText.Text)) 12 { 13 MessageBox.Show("文字を入力してください"); 14 mainText.Focus(); 15 } 16 else 17 { 18 // このMainWindowは今出ているMainWindowではない! 19 // 新しくMainWindowを作ってしまっている(だから2つになってしまう) 20 //MainWindow win = new MainWindow(); 21 22 // どうしてもこっち側(SubWindow)でやりたいのであればこんな感じ 23 //var win = Application.Current.MainWindow as MainWindow; 24 //win.listBox.Items.Add(mainText.Text + "/" + subText.Text); 25 26 DialogResult = true; 27 } 28 } 29 } 30}

投稿2021/10/13 21:06

編集2023/07/29 07:10
TN8001

総合スコア9401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tetsu21

2021/10/14 03:31

ものすごく助かりました!ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問