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

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

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

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

Visual Studio

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

Q&A

解決済

1回答

1915閲覧

WPF ComboBox テキストファイルの読み込み

Pickerchu

総合スコア13

C#

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

Visual Studio

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

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

WPF

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

0グッド

0クリップ

投稿2018/08/01 06:59

ComboBoxにテキストファイルの読み込み方を教えてください。

エラー内容:静的でないフィールド、メソッド、またはプロパティMainWindow.???でオブジェクト参照が必要です。

xaml

1<ComboBox Name="Cb" 2 SelectionChanged="Cb_SelectionChanged" 3 ItemsSource="{Binding JobItems}" 4 DisplayMemberPath="JobNameDisplay"/>

C#

1public static void Cb_ListJob(object sender,EventArgs e) 2 { 3 try 4 { 5 StreamReader sr = new StreamReader(@"C:\JobList.txt");//ファイルの階級は省略しています 6 string line = sr.ReadLine(); 7 8 while(line != null) 9 { 10          //↓?の所に何を入れるか不明です 11 ???.Items.Add(line); 12 line = sr.ReadLine(); 13 } 14 } 15 catch(Exception ex) 16 { 17 MessageBox.Show("error : " + ex.Message); 18 } 19 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

例えばこうです。

XAMLからBindingを消しておきます。

xaml

1<Window x:Class="WpfApplication18.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:WpfApplication18" 7 mc:Ignorable="d" 8 Title="MainWindow" Height="350" Width="525"> 9 <Canvas> 10 <ComboBox Name="Cb" DisplayMemberPath="JobNameDisplay" Width="176" Canvas.Left="18" Canvas.Top="42"/> 11 </Canvas> 12</Window>

InitializeComponent()の後辺りにファイルからの読み込み処理が入っています。

csharp

1using System.Collections.Generic; 2using System.Linq; 3using System.Text; 4using System.Windows; 5 6namespace WpfApplication18 7{ 8 /// <summary> 9 /// MainWindow.xaml の相互作用ロジック 10 /// </summary> 11 public partial class MainWindow : Window 12 { 13 private string _defaultJobCode = "b000"; 14 private List<JobItem> _jobItems = new List<JobItem>(); 15 16 public MainWindow() 17 { 18 InitializeComponent(); 19 20 var lines = System.IO.File.ReadAllLines(@"C:\JobList.txt", Encoding.GetEncoding("shift_jis")); 21 var jobItems = lines.Select(line => 22 { 23 var cols = line.Split(','); 24 return new JobItem() { JobCode = cols[0], JobName = cols[1] }; 25 }); 26 _jobItems.AddRange(jobItems); 27 28 Cb.ItemsSource = _jobItems; 29 Cb.SelectedItem = _jobItems.FirstOrDefault(item => item.JobCode == _defaultJobCode); 30 31 } 32 } 33 34 public class JobItem 35 { 36 public string JobCode { get; set; } = ""; 37 public string JobName { get; set; } = ""; 38 public string JobNameDisplay { get { return JobCode + ":" + JobName; } } 39 } 40} 41

カンマで区切られたものは、Splitでいい加減に分断していますが、
例えば役職名にカンマが入っていたらこのコードでは正しく動かない点に注意してください。

投稿2018/08/01 07:07

編集2018/08/01 08:49
takabosoft

総合スコア8356

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

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

Pickerchu

2018/08/01 07:16

素早いご回答ありがとうございます。 どこかでというのは、質問にあるメソッド内のwhileの中で大丈夫でしょうか?
Pickerchu

2018/08/01 07:18

すみません、InitializeComponentの次辺りに、と記述してありました。 試してみます。
takabosoft

2018/08/01 07:18

場所も回答文に書きました。
Pickerchu

2018/08/01 08:25

上手くいかなかったので、新しくクラスを作成したのですが、 ""の中はどう書いていいのかと、カンマ区切りの場合の2点が分かりません。 その他、変更点ございましたらお手数ですがご教授ください。 private void JobData() { using (var sr = new StreamReader(@"C:\JobList.txt", Encoding.GetEncoding("shift_jis"))) { string line; while(sr.Peek() > -1) { line = sr.ReadLine(); _jobItems.Add(new JobItem { JobCode = "", JobName = "", JobNameDisplay = "" + ":" +"" }); } Cb.ItemsSource = _jobItems; foreach (var item in _jobItems) { if (_defaultJobCoode == item.JobCode) { Cb.Text = item.JobNameDisplay; break; } } } }
Pickerchu

2018/08/01 08:29

JobList.txtはこんな感じです。 a000,役職名 a001,役職名 b000,役職名 b001,役職名
takabosoft

2018/08/01 08:31

それは先に情報として出しておくべきでしたね(^_^;)
Pickerchu

2018/08/01 08:36

申し訳ございません。 これからは気を付けます。
takabosoft

2018/08/01 08:58

回答を更新しました。
Pickerchu

2018/08/01 10:31

ご丁寧にありがとうございます。 試したいのですが、ファイルパスが上手くいかず実行ができません。 テキストファイルはxaml、C#などと同じ階層です。 var lines = System.IO.File.ReadAllLines(@"C:\JobList.txt", Encoding.GetEncoding("shift_jis")); 度々の質問でお手数おかけしてしまい申し訳ございません。
takabosoft

2018/08/02 00:09

ひとまずフルパスで記述して動作する事を確認してこの質問は終了してください。このjoblistテキストファイルをどこから読み込みたいのか(EXEと同じフォルダに配置してそれを読み込みたいのか、リソースとして埋め込んだものを使いたいのか)は別の質問として単発で投稿してもらった方が良いかと思います。
Pickerchu

2018/08/02 03:54

ファイルパスは自己解決することができ、コンボボックスにも値が上手く入りました! ご迷惑をおかけしてしまいましたが、無事解決でき、本当に助かりました。 遅くなってしまいましたが、ベストアンサーに選ばさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問