1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WPFで別ウィンドウを呼び出した時、別ウィンドウのタブ切り替えを指定したい

Last updated at Posted at 2020-08-01

#やりたいこと

  • メインウィンドウ
  • サブウィンドウ
  • サブウィンドウはタブ切り替えを持つ

メインウィンドウからサブウィンドウを開くとき、サブウィンドウのどのタブを開くのか指定したい

#準備
メインウィンドウとサブウィンドウを用意します。

image.png

MainWindow.xaml
<Window><!-- ここは省略 -->
    <Grid>
        <StackPanel Margin="20">
            <Button Name="BtnA" Margin="20">SubWindow タブ AAA を開く</Button>
            <Button Name="BtnB" Margin="20">SubWindow タブ BBB を開く</Button>
            <Button Name="BtnC" Margin="20">SubWindow タブ CCC を開く</Button>
        </StackPanel>
    </Grid>
</Window>

image.png

SubWindow.xaml
<Window><!-- 省略 -->
    <Grid>
        <TabControl Margin="20">
            <TabItem Header="AAA" Name="AAA">
                <StackPanel>
                    <TextBox Margin="50">タブAAAです</TextBox>
                </StackPanel>
            </TabItem>
            <TabItem Header="BBB" Name="BBB">
                <StackPanel>
                    <TextBox Margin="50">タブBBBです</TextBox>
                </StackPanel>
            </TabItem>
            <TabItem Header="CCC" Name="CCC">
                <StackPanel>
                    <TextBox Margin="50">タブCCCです</TextBox>
                </StackPanel>
            </TabItem>
        </TabControl>
    </Grid>
</Window>

#内容
タブ切り替え用のカウンタ変数を扱うクラス TabChange を用意します

TabChange.cs
public class TabChange
    {
        public static int tabChange;
    }

次はメインウィンドウの処理。ボタンを押すとタブ切り替え用のカウンタ変数 tabChange の値が変わります。

MainWindow.xaml.cs
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void BtnA_Click(object sender, RoutedEventArgs e)
    {
        TabChange.tabChange = 0;
        SubWindow sw = new SubWindow();
        sw.Show();
    }

    private void BtnB_Click(object sender, RoutedEventArgs e)
    {
        TabChange.tabChange = 1;
        SubWindow sw = new SubWindow();
        sw.Show();
    }

    private void BtnC_Click(object sender, RoutedEventArgs e)
    {
        TabChange.tabChange = 2;
        SubWindow sw = new SubWindow();
        sw.Show();
    }
}

次はサブウィンドウの処理。ウィンドウが生成された時のtabChangeの値によって、タブを選択します。

SubWindow.xaml.cs
/// <summary>
/// SubWindow.xaml の相互作用ロジック
/// </summary>
public partial class SubWindow : Window
{
    public SubWindow()
    {
        InitializeComponent();
        if (TabChange.tabChange == 1)
        {
            BBB_select();
        }
        if (TabChange.tabChange == 2)
        {
            CCC_select();
        }
    }
    public void BBB_select()
    {
        //BBBタブを選択状態にする
        BBB.IsSelected = true;
    }
    public void CCC_select()
    {
        //CCCタブを選択状態にする
        CCC.IsSelected = true;
    }
}

#あとがき
「ウィンドウを開いてタブを選択する」メソッドを僕が知らないだけでしたらすみません。
まだまだ初心者なので、コード自体の書き方、qiitaへの文の書き方でこうしたらもっと読みやすくなる、良くなる、というご指摘がありましたら是非お願い致します。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?