none
【C#】WPFのリストボックスで選択された文字列を取得したいのですが、方法が不明です。 RRS feed

  • 質問

  • WPFのリストボックスで選択された文字列を取得したいのですが、色々と探しては見たのですが、良さそうな方法が見つからなかったので、

    大変お手数ではございますが、ご教授いただけますと幸いでございます。使用している言語はC#となります。

    詳細は以下となりますが、

    ①WPFのリストボックスは、空っぽの状態で起動されます。

    ②その後、C#コード上で「.Items.Add」を使用してリストボックスに要素(ファイル名)を追加しています。

     以下のコードでは固定のように記載しておりますが、追加する要素はその都度変化するため、固定では無く可変となります。

    ③GUI上でユーザが②で追加した要素(ファイル名)を選択、「表示」ボタンをクリックした際には、選択された要素(ファイル名)を開こうと考えています。

    しかしながら、選択された要素から、要素名(ファイル名)を抜き出す方法が見つからず、困っております。。

    以下ザックリしておりますが、コードとなります。太字下線の箇所が不明点となります。

    お手数ではございますが、ご教授いただければ幸いでございます。

    ====================================================
    ~~~あらかじめ行っている処理~~~
        //空っぽのリストボックスへ要素を追加("aaa.txt","bbb.txt","ccc.txt"固定では無く、可変の要素である)
        TestListBox.Items.Add("aaa.txt");
        TestListBox.Items.Add("bbb.txt");
        TestListBox.Items.Add("ccc.txt");
    ~~~あらかじめ行っている処理~~~

    ↓↓↓↓↓↓
    その後GUI上でユーザが上記要素("aaa.txt","bbb.txt","ccc.txt")のいずれかを選択し
    「表示ボタン」をクリックした場合には以下メソッドがコールされる。
    ↓↓↓↓↓↓

    private void Test_Display_click(object sender, RoutedEventArgs e)
    {
        string fileName = "";

        // 選択項目がない場合は処理をしない
        if (TestListBox.SelectedItems.Count == 0)
        {
            return;
        }
       
        //リストボックスで選択しているファイル名を取得
        //※※※※ここに入れる処理が不明("fileName"に選択されている要素名称を入れたい)※※※※

        //ファイルを開いて終了まで待機する
        Process p = Process.Start("Wordpad", fileName);
        p.WaitForExit();
    }
    ====================================================

    • 移動 星 睦美 2015年11月25日 4:00 .NET Framework から
    2015年11月25日 3:17

回答

  • Items.Addで文字列を追加しているだけであるなら

    namespace WpfApplication1
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                TestListBox.Items.Add("aaa.txt");
                TestListBox.Items.Add("bbb.txt");
                TestListBox.Items.Add("ccc.txt");
            }
    
            private void Text_Display_Click(object sender, RoutedEventArgs e)
            {
                if(this.TestListBox.Items.Count>0 && this.TestListBox.SelectedIndex>=0)
                {
                    var path1 = (string)TestListBox.Items[TestListBox.SelectedIndex];
                    System.Diagnostics.Debug.WriteLine(path1);
    
                    //複数選択可能な場合
                    if (TestListBox.SelectionMode != System.Windows.Controls.SelectionMode.Single)
                    {
                        foreach (string path2 in this.TestListBox.SelectedItems)
                        {
                            System.Diagnostics.Debug.WriteLine(path2);
                        }
                    }
                }
            }
        }
    }


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 星 睦美 2015年11月25日 4:00
    • 回答としてマーク 星 睦美 2015年12月22日 7:26
    2015年11月25日 3:48

すべての返信

  • Items.Addで文字列を追加しているだけであるなら

    namespace WpfApplication1
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                TestListBox.Items.Add("aaa.txt");
                TestListBox.Items.Add("bbb.txt");
                TestListBox.Items.Add("ccc.txt");
            }
    
            private void Text_Display_Click(object sender, RoutedEventArgs e)
            {
                if(this.TestListBox.Items.Count>0 && this.TestListBox.SelectedIndex>=0)
                {
                    var path1 = (string)TestListBox.Items[TestListBox.SelectedIndex];
                    System.Diagnostics.Debug.WriteLine(path1);
    
                    //複数選択可能な場合
                    if (TestListBox.SelectionMode != System.Windows.Controls.SelectionMode.Single)
                    {
                        foreach (string path2 in this.TestListBox.SelectedItems)
                        {
                            System.Diagnostics.Debug.WriteLine(path2);
                        }
                    }
                }
            }
        }
    }


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 星 睦美 2015年11月25日 4:00
    • 回答としてマーク 星 睦美 2015年12月22日 7:26
    2015年11月25日 3:48
  • 早速のご回答ありがとうございます!!

    ご提示いただきました、ソースにて無事「ファイル名」が取得できました!

    C#を使って間もないので、とても助かりました、ありがとうございます!

    2015年11月25日 3:56
  • フォーラム オペレーターの星 睦美です。amikou0227 さん、こんにちは。
    回答者の励みになりますので、フォーラム ユーザーからの回答がお役にたちましたら投稿者から[回答としてマーク] をいただければと思います。それでは今後ともフォーラムをお役立てください。

    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年11月25日 6:19