• 締切済み

ListBox内のobjectのメンバ変数

VS2013 C# Windows Form Application での質問です ListBox内の項目に自作クラスPos(メンバ変数double x,y)を下記のように入れました listBox1.Items.Add(new Pos()); このとき double a = listBox1.~.x のようにlistBoxに入れたPosクラスのメンバ変数の値は取得できませんか?

みんなの回答

  • byDesign
  • ベストアンサー率75% (45/60)
回答No.1

キャストしてあげれば良いです お好きなのをどうぞ // indexで取得 var index = 0; var pos = ((Pos)listBox1.Items[index ]); var a = pos.x; // 選択されてるものを取得(単一選択) var pos = ((Pos)listBox1.SelectedItem ); var a = pos.x; // 選択されてるものを取得(複数選択) foreach(Pos pos in listBox1.SelectedItems){   var a = pos.x; }

関連するQ&A

  • ”ListBoxへのAddでエラー”

    タイトルの通りです。 DoubleからStringの型変換が不可なんでしょうか? ”.ToString” によってエラーになってるようです。 For~Eachでの3行で処理するとOKなのですが1行で なんとかならないものかと調べていましたが、いきずまっています。 Items.AddではなくItems.AddRangeを使う場合、どういうふうに 書くんでしょうか?。ちなみに、配列がString型の場合にはエラー にならないことは知っています。(.ToStringも不要) ’--------サンプル---------- Public Class Form1 Private Sub Button1_Click() Handles Button1.Click Dim Test_arr() As Double = {1.4, 1.2, 1.9, 1.7, 1.4, 2.8, 1.2, 3.2, 1.99, 4.2} ListBox1.Items.AddRange(Test_arr.ToString) '←この行でエラー For Each x As Double In Test_arr '←これはOK ListBox1.Items.Add(x.ToString) ' Next ' End Sub End Class エラー内容は、↓ ------------------------------------------------------------------ エラー 1 これらの引数で呼び出される、アクセス可能な 'AddRange' が ないため、オーバーロードの解決に失敗しました: 'Public Sub AddRange(items() As Object)': 型 'String' の値を 'Object の 1 次元配列' に変換できません。 'Public Sub AddRange(value As System.Windows.Forms.ListBox.ObjectCollection)': 型 'String' の 値を 'System.Windows.Forms.ListBox.ObjectCollection' に変換できません。 ------------------------------------------------------------------ どなたかご教授願えれば幸いです。環境はVisualBasic2010+WindowsXPです。

  • VB2015 ListBoxの二次元配列を呼出す

    始めまして。 趣味でVBソフトを作りたいと奮闘中です。 ExcelVBAやC#の簡単ソフトを作った経験があります。 パソコン環境は、W10x64、VB2015です。 ListBoxに2次元配列で下記のように書き込み、選択した行の右側のデータ(欄2)を他のTextBoxに表示させたいのです。 下のデータを2次元配列にして読み込ませる方法と、選択した行の欄2のデータを取り込む方法を教えて頂けると嬉しいです。ListBoxのプロパティのMultiColumnはTrueにしてあります。  欄1 欄2 北海道  550 青森県  138 宮城県  230 東京都  1360 現在は次のようにしてなんとか逃げておりますが、2次元配列でスマートに出来れば嬉しいです。 書き込み ListBox1.BeginUpdate() ListBox1.Items.Add("北海道 , 550") ListBox1.Items.Add("青森県 , 138") ListBox1.Items.Add("宮城県 , 230") ListBox1.Items.Add("東京都 , 1360") ListBox1.EndUpdate() 呼び出し Dim textArray = ListBox1.SelectedItem.ToString.Split(",")  Dim Jinko As Single = Single.Parse(textArray(1)) TextBox.Text = Jinko 宜しくお願い致します。 熊谷

  • listBoxとTimerについて C#

    listBoxとTimerについて C# ヤフーニュースのURLをlistboxへ入れます。 そしてlistBox1の中身を画面表示させたら、次にlistBox2の中身も表示したいと思っています。 最初listBoxが1つだったときはうまく行っていたのですが、listBoxを増やすとうまく行かなくなりました。 この状態だと、listBox2の中身だけ表示させて終わってしまいます。 Timerの使い方が怪しいと思うのですが、どうでしょうか? 些細なことでも何でもいいのでご意見頂ければ助かります。 -----以下コード抜粋------ public partial class Form1 : Form { public Form1() { InitializeComponent(); } int urlindex = 0; private void Form1_Load(object sender, EventArgs e) { listBox1.AllowDrop = true; listBox1.DragEnter += new DragEventHandler(listBox1_DragEnter); listBox1.DragDrop += new DragEventHandler(listBox1_DragDrop); listBox2.AllowDrop = true; listBox2.DragEnter += new DragEventHandler(listBox2_DragEnter); listBox2.DragDrop += new DragEventHandler(listBox2_DragDrop); } private void listBox1_DragEnter(object sender, DragEventArgs e) { //URLのみ受け入れる//@ITより if (e.Data.GetDataPresent("UniformResourceLocator")) e.Effect = DragDropEffects.Link; else e.Effect = DragDropEffects.None; } private void listBox2_DragEnter(object sender, DragEventArgs e) { //URLのみ受け入れる//@ITより if (e.Data.GetDataPresent("UniformResourceLocator")) e.Effect = DragDropEffects.Link; else e.Effect = DragDropEffects.None; } private void listBox1_DragDrop(object sender, DragEventArgs e) { //ドロップされたリンクのURLを取得する//@ITより string url = e.Data.GetData(DataFormats.Text).ToString(); //結果を表示 listBox1.Text = url; //MessageBox.Show(url); //ドロップされたデータがstring型か調べる if (e.Data.GetDataPresent(typeof(string))) { ListBox target = (ListBox)sender; //ドロップされたデータ(string型)を取得 string itemText = (string)e.Data.GetData(typeof(string)); //ドロップされたデータをリストボックスに追加する target.Items.Add(url); //MessageBox.Show("表示"); } } private void listBox2_DragDrop(object sender, DragEventArgs e) { //ドロップされたリンクのURLを取得する//@ITより string url = e.Data.GetData(DataFormats.Text).ToString(); //結果を表示 listBox2.Text = url; //MessageBox.Show(url); //ドロップされたデータがstring型か調べる if (e.Data.GetDataPresent(typeof(string))) { ListBox target = (ListBox)sender; string itemText = (string)e.Data.GetData(typeof(string)); target.Items.Add(url); } } private void goButton_Click(object sender, EventArgs e) { urlindex = 0; timer1.Start(); timer2.Start(); } private void timer1_Tick(object sender, EventArgs e) { timer1.Stop(); if (listBox1.Items.Count != 0 && urlindex < listBox1.Items.Count) { string url = (string)listBox1.Items[urlindex]; webBrowser1.Navigate(url); urlindex++; } } private void timer2_Tick_1(object sender, EventArgs e) { timer2.Stop(); if (listBox2.Items.Count != 0 && urlindex < listBox2.Items.Count) { string url = (string)listBox2.Items[urlindex]; } } private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { timer1.Start(); timer2.Start(); } private void listBox2_SelectedIndexChanged(object sender, EventArgs e) { }

  • 【C++】メンバ変数をポインタで宣言するデメリット

    クラスAが、メンバーとして、 クラスXと、クラスYを持っているとします。 そのようなとき、 【ケース1】  クラスAを定義する際、  メンバである、クラスX、クラスYは、ポインタで宣言させる。 【ケース2】  クラスAを定義する際、  メンバである、クラスX、クラスYは、ポインタではなく、クラスX/クラスYの型として宣言させる。 があると思いますが、それぞれどのようなデメリットがあるでしょうか? ----------------------------- 私は、ケース1は、 メリット:   クラスXを継承したクラスChild_Xや、クラスYを継承したクラスChild_Yを、   クラスAで扱えるようになる。   デメリット:   クラスXのポインタで宣言していると、クラスXを派生したクラスが格納可能であるため、   開発時に、そのメンバーに、実際にはどの型のクラスが格納されているかがわからず、   Visual Studio で追いかけられない。   (※そのメンバーに対して、右クリック⇒定義で見ても、どの型のポインタ変数かはわかっても、     どの型がそこに突っ込まれているかは、代入されているところを探して確認しないとわからない。) 私は、処理を確認する際、『どの型の値がそこに突っ込まれているかは、代入されているところを探して確認しないとわからない。』というのが、可読性は悪いわ、確認に時間が取られるわで、 非常に大きなデメリットと考えています。 このデメリットを解消する方法はあるのでしょうか?

  • ActiveX EXEのオブジェクトに渡したオブジェクトが微妙

    またまた微妙な質問ですみません。 ------- ActiveX EXEプロジェクト Class Hoge Public Sub Moge(lst) Dim Cast As ListBox MsgBox TypeName(lst) 'ListBoxと表示される Set Cast = lst 'ここがエラー Cast.List(2) = "hogehoge" 'キャストはできないがVariant型のままのアクセスは可能 End Sub ------- 標準EXE Class Form1 (List1を配置) Dim X As New Hoge Private Sub Form_Load() X.Moge List1 End Sub ----- このように、アウトプロセスのオブジェクトにフォームのコントロールを渡しました。 引数の型をAs ListBoxにしたかったのですが、それだとまずそこで型が一致しないといわれます。 しようがないのでVariantで引数を宣言し、渡した後にキャストしようと思ったのですが、そこでも型が一致しないといわれます。 TypeName関数は "ListBox" を返すし、Variant型のままメンバにアクセスすることはできるのですが、ListBox型の変数に代入することだけできないのです。 別プロセスのオブジェクトには、オブジェクトの参照は渡せないのでしょうか?

  • C#でオブジェクトが生成されるたびに加算される変数

    タイトルの通りなのですがどうも上手く行かなくて・・・ まず、これが今作ってる、立方体の定義のためのクラスです class cube { public point a = new point(); public point b = new point(); public point c = new point(); public point d = new point(); public point A = new point(); public point B = new point(); public point C = new point(); public point D = new point(); } (point は x,y,zの値を持つ別のクラスです) ここで、それぞれのpoint(頂点)を生成した分だけ、それぞれのオブジェクトに、その通し番号を持たせることは出来ないでしょうか、つまり、最終的にそれぞれのオブジェクトが それぞれのクラスのメンバ変数 ”通し番号” を定義したとして a.通し番号 が 1 b.通し番号 が 2 c. 通し番号 が 3 という感じになるようにしたいんですが出来ません・・・ 外部にstaticな変数をおいてどうにかしようと思いましたが、staticなので、最後の通し番号に上書きされてしまって個別のオブジェクト内に保持できません むしろstatic変数ののある時点での実態コピーが出来るならそれも教えて下さい、それでもこの問題は解決します よろしくお願いします

  • 【C#】クラスのメンバ変数のアクセス修飾子の省略

    初歩的な質問かもしれませんが、 C#にてクラスのメンバ変数を定義する際、 public int x; public int y; のように、変数一つずつにアクセス修飾子をつけなければいけないのでしょうか? 例えば、C++/CLIだと public: int x; int y; のように書くことで、個別に修飾子をつけなくても、 複数の変数に対してアクセスレベルを設定できたのですが。。 ご存知の方おられましたら、ご教示お願い致します。

  • --iアプリ-- ListBoxの項目をPanelクラスでTicker型に流し込み表示させたい

    ニュースを配信するiアプリで、 ・あるクラスでニュースの項目をListBoxに入れます。 ListBoxは以下のように定義してあります。 private ListBox itemList = new ListBox(ListBox.NUMBERED_LIST, 9); そのListBoxをPanelクラスのほうに送ります。 送ったPanelクラスのほうではニュースの項目を確認することはできます。 ここで問題ですが、 Panelに送ったListBoxですが、一つ一つの値(項目)をTicker型(流れるように表示したい)にして表示させたいのです。 Panelクラス--- panel.add(ListBox); //ListBoxの項目が表示される tick = new Ticker(); ?? TickにはString型の文字を入れないといけないのはわかるのですが、ListBoxの項目をPanelのほうで取得できないのです。 どうすれば取得できるのでしょうか? 教えてください、お願いします。

    • ベストアンサー
    • Java
  • c++ 包含しているメンバーのリスト

    包含しているメンバーのリストを取得するにはどうすれば良いでしょうか? 例えば、クラスAが long型の変数x、yと、 char型の変数zを持っているとき、 それらの「型」及び「変数名」を配列で返すような方法などがあるのかなと思っています。

  • VB2010でCOM番号をListBoxに格納する

    VB2010でシリアルポート番号をListBoxに格納するには コードは以下になります。現時点でListBoxに何も表示されません。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub GetSerialPortNames() ' Show all available COM ports. For Each sp As String In My.Computer.Ports.SerialPortNames ListBox1.Items.Add(sp) Next End Sub End Class 上記コードは下記URLを参考しています。 「Visual Basic で利用可能なシリアル ポートを表示する」 http://msdn.microsoft.com/ja-jp/library/9wahf8t8%28v=vs.80%29.aspx 素人ですが、どこが足りないのは教えて下さい。