• 締切済み

(VB2005) ArrayListにおいて、Itemを追加すると、以前追加されたものまで更新

KG_の回答

  • KG_
  • ベストアンサー率62% (34/54)
回答No.1

>chk.ValBBB.val = 10 >AList.Insert(0,chk) >chk.ValBBB.val = 20 >AList.Insert(0,chk) >chk.ValBBB.val = 30 >AList.Insert(0,chk) chk変数をそれぞれ宣言して、 chk1.ValBBB.val = 10 AList.Insert(0,chk1) chk2.ValBBB.val = 20 AList.Insert(0,chk2) chk3.ValBBB.val = 30 AList.Insert(0,chk3) のようにしても同現象が発生しますか? これで解決するならInsertしているのはchkへの参照ということになります。 #小さいサイズだとうまくいくというのがひっかかりますが。。。

関連するQ&A

  • (VB2005) ArrayListへの実体(値型変数)格納について

    先刻も質問させてもらい、redfox63さま、KGさまに 回答いただきありがとうございました。 ArrayListに参照型データが格納されているようであることが判明しました。 ではArrayListに値型(変数の実体)を格納するにはどうすればいいでしょうか? 【前提】 ・処理の中で構造体変数XXXが更新される。 ・XXX更新の都度、Undo用ArrayListのAListにXXXを保存する関数をコールする。 Dim XXX as New AAA Dim AList as NEW ArrayList  XXX <--- 処理の中で更新がかかるとともに、保存関数XXX_Updateをコールする。 Private Function XXX_Update( )  Dim XXX_Buf as AAA  XXX_Buf = NEW AAA  XXX_Buf = XXX …(1)  AList.Insert(0,XXX_Buf) …(2) End Function このような関数ではAListにXXXへの参照データが入ってしまい、 過去に保存したはずのItemすべてが現在のXXXになってしまいます。 ということはAListに格納されているデータはすべて 現在のXXXを参照するデータになっているということですね? AListにXXXの実体(値型)を格納するにはどうすればいいでしょうか? DirectCastが値型と参照型の変換という説明を見つけたので使ってみましたが、 うまくいきませんでした。  (1)⇒ XXX_Buf = DirectCast(XXX, AAA)  (2)⇒ AList.Insert(0,DirectCast(XXX_Buf,AAA)) 原因や解決法などおわかりの方いましたら、回答よろしくお願いします。

  • Option Strictと構造体とArrayListの関係について(VB2005)

    下記はArrayListに構造体の値を格納し、表示させるプログラムです。 -------------------------------- Option Strict Off '構造体 Public Structure hoge   Dim a As String   Dim b As String   Dim c As String End Structure Private Sub test()   Dim aryhoge As New ArrayList   Dim foo As hoge   foo.a = "aa"   foo.b = "bb"   foo.c = "cc"   aryhoge.Add(foo)           MessageBox.Show(aryhoge(0).a)  'A) Option Strict Off だと"aa"と表示される End Sub -------------------------------- このプログラムはOption Strict Offだとメッセージボックスに"aa"と表示されます。 ですがOption Strict Onだと、(A)の箇所にて「遅延バインディングを使用できません」というエラーが発生し、実行ができません。 質問内容は、Option Strict Onで上記のプログラムを動かすには、(A)をどのように修正すればよいか、というものです。 どうぞよろしくお願い致します。

  • ArrayListへArrayListの格納

    お世話になっております。 ArrayListを2つ使用して2次元配列のような事をしようとしております。 データベースから取得したデータの1行をArrayListItemへ格納してそのArrayListItemをArrayListRecordへ格納しようとしております。 追加し終わり最後にArrayListRecordの中身を見ると全て一番最後のデータで置き換わっています。 どなたかご存知でしたらお教え願います。 ' 変数宣言 Dim objSqlDR As SqlDataReader Dim alSetItem As ArrayList Dim alSetRecord As ArrayList alSetItem = New ArrayList alSetRecord = New ArrayList ' データ取得分ループ While objSqlDR.Read()  alSetItem.Clear()  For intSetIndex = 0 To (objSqlDR.FieldCount - 1)   alSetItem.Add(objSqlDR(intSetIndex))  Next intSetIndex  alSetRecord.Add(alSetItem) End While

  • 【VB2005】変数の保存

    ゲームプログラムの練習をしておりまして、 たとえば、アイテムAの情報を(アイテムの名前)(アイテムの価格)(アイテムの個数) などを変数を使って、下記のような構造体で持つか悩んでいます。 Private Structure ItemData Dim Name As String Dim kakaku As long Dim kazu As integer End Structure この変数は、アイテムをデータベースのように 指定したアイテムをいつでも価格入力することにより、 そのアイテムが変更かけれるようにしたいと考えてます。 バイナリで読み書きするときは、どうすればよいでしょうか? お知恵を借りたいと思っています。

  • ArrayListに多次元配列

    ArrayListに多次元配列の変数を格納したのですが、取り出し方がわからず困っています。 ----------------------------------------------- String[][] str = {{"aaa","bbb","ccc","ddd","eee","fff"}, {"aaa","bbb","ccc","ddd","eee","fff"}, }}; ArrayList array = new ArrayList(); array.add(str[0]); array.add(str[1]); ----------------------------------------------- 上記の場合で、str[0][2];を取得する方法がわかりません。 java初心者なのでおかしな質問かもしれませんが、宜しくお願いします。

    • ベストアンサー
    • Java
  • VB.NETの配列とArrayListについて教えてください。

    VB.NETで配列にPoint型のデータを入れたいのですが、 ArrayListのAddメソッドのように総数をあらかじめ指定せずに 順次追加するように登録していきたいのですが、 そのようなことは可能でしょうか? 最終的には Dim points As Point() g.DrawLines(Pens.Black, points) の方法で線分を描きたいのですが、 ArrayListですとデータ型が指定できないので Point型のデータを格納できないです。 良い方法がありましたら、ご教示頂けると助かります。

  • VB functionについて

    プログラム初心者です。 以下のソースをVB2010で動作させると型'double'の値を'system.Collections.ArrayList'に変換できません。となります。呼び出し方法がおかしいと思うのですが。よく分かりません。解決方法を教えてくださいお願い致します。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim aArr() As Double aArr(1) = 1.1 aArr(2) = 2.3 MsgBox(AAA(aArr)) End Sub Public Function AAA(ByVal aArr As ArrayList) As Double() Dim retVal As Double() = Nothing ReDim retVal(2) Dim loopCnt As Integer = 0 Dim Arrcnt As Integer = aArr.Count Dim sum As Double = 0.0 For loopCnt = 0 To Arrcnt - 1 sum += aArr(loopCnt) Next sum = sum / loopCnt retVal(0) = sum Return retVal End Function

  • VB2008で構造体を引数とした時にエラー

    VB2008の勉強を始めて数週間の初心者です。 勉強用にいろいろとプログラムを作っているのですが、 構造体(Structure)を引数で渡して戻り値を取得する Functionを作成してみました。 同一クラス内のPrivate Function の場合は問題ないのですいが、 追加した別クラスに Function を作成したところ 「 型 'TEST_A.Form1.str_IN' の値を 'TEST_A.Class1.str_IN' に変換できません。」 のエラーが表示されてしまいます。 別クラスのFunctionを使用する時、引数には構造体は指定できないのでしょうか? なにか文法上の誤りがあるのでしょうか? 初心者なので変な質問してたらスイマセン。 詳しい方がいらっしゃいましたらよろしくお願いします。 ------------------------------------------------------ Public Class Form1  Public Structure str_IN   Public in_aaa As String  End Structure  Private Sub Button1_Click(ByVal sender As System.Object,  ByVal e As System.EventArgs) ~   Dim stin As New str_IN   '------------------------------------   stin.in_aaa = "aaa"   Label1.Text = Test_Sub(stin) '<------- これはok   '-------------------------------------   Dim cls = New Class1   stin.in_aaa = "aaa"   Label1.Text = cls.CFnk(stin) '<----- エラーになる  End Sub  Private Function Test_Sub(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class ------------------------------------------------------------ Public Class Class1 '新たに作成したクラス  Public Structure str_IN   Public in_aaa As String  End Structure  Public Function CFnk(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class

  • ArrayListの初期値の設定の仕方(VB.NET)

    VB.NET2005についての質問です。 ArrayList型の変数の初期値に、プロパティの戻り値を設定することは可能でしょうか。 (つまり、下記の(a)(b)の二行を一行にまとめたい、と考えています) どうぞよろしくお願い致します。 Public Class form1   Dim hoge As New ArrayList  'a)初期値としてClass1.P_hogeを設定したい   hoge = Class1.P_hoge    'b)消したい End Class Public Class Class1   Private Shared _hoge As New ArrayList  'すでに値が格納されているものとする   Public Shared Property P_hoge() As ArrayList      Get    Return _hoge    End Get   End Property End Class

  • ArrayListの初期値に二次元配列を設定したい(VB2005)

    下記は、aryhogeにTextBoxオブジェクトを格納する処理です。 ---------------------------------------- 'a) Dim hoge()() As TextBox = _       {New TextBox() {txta01, txtb01, txtc01}, _       New TextBox() {txta02, txtb02, txtc02}, _       New TextBox() {txta03, txtb03, txtc03}} Dim aryhoge As New ArrayList    'b) aryhoge.Add(hoge(0)) aryhoge.Add(hoge(1)) aryhoge.Add(hoge(2)) ---------------------------------------- (a)を(b)の初期値として設定するにはどのようにすればよいか、ということが質問内容です。 試しに(b)の部分を以下のようにしてみましたが、「1次元配列の値を変換できない」とのエラーが出ました。 Dim aryhoge As New ArrayList(New TextBox() {hoge(0), hoge(1), hoge(2)}) どうぞよろしくお願い致します。