DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ListViewの表示更新について

環境/言語:[XP、.NET Framework2.0]
分類:[.NET]

いつもこの掲示板様の記事を参考にさせていただいております。
掲示板を検索したのですが、私の検索が良くない為か、参考記事を見つけることができませんでしたので投稿させていただきました。
現在、VB.NET2005でアプリを作成しており、表示が更新されない為悩んでおります。

二つのフォーム(FormA、FormB)があり、それぞれに同じ構造のListView(lstA(FormA)、lstB(FormB))を配置しております。
FormAからFormBを起動し、二つのフォームはそれぞれ画面をさわれる状態です。

FormBに配置したlstBで行選択して、その選択行のアイテムを[OK]ボタンクリックイベントで、FormAに配置したlstAに追加させたいのです。
受渡しは行われているようなのですが、lstAが更新されずに悩んでおります。

記述モジュール
FormBの記述(呼び出し元)
Private Sub cmdOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOK.Click
 Dim intCnt As Integer = Me.lstB.SelectedItems.Count
 Dim intI As Integer
 For inti = 0 To intCnt - 1
  Dim itemX As ListViewItem = Me.lstB.SelectedItems(intI)
  strA = itemX.Text
  strB = itemX.SubItems(1).Text
  strC = itemX.SubItems(2).Text
  strD = itemX.SubItems(3).Text
  If FormA.insertView(strA, strB, strC, strD, intCnt - 1) = False Then
  'FormAからエラーが返された場合は終了する
   Exit Sub
  End If
 Next
End Sub

FormAの記述(呼び出される側)
Public Function insertView(ByVal strA As String, ByVal strB As String, _
ByVal strC As String, ByVal strD As String, _
ByVal intCnt As Integer) As Boolean
 Dim intI As Integer
 Dim intC As Integer
 'エラー処理の記述(エラーの場合はFalseを返す)
 Dim itemS As New ListViewItem
 itemS.Text = strA
 itemS.SubItems.Add(strB)
 itemS.SubItems.Add(strC)
 itemS.SubItems.Add(strD)
 Me.lstA.Items.Add(itemS)

 intI = Me.lstA.Items.Count
 Me.lstA.Refresh()
 Return True
End Function

insertViewのintI = Me.lstA.Items.Countの記述でlstAの件数を取得しているようですのでlstAに追加されているものと考えておりますが、もしかしたら表示が更新されないだけでなく、追加もされていないのでは?とも悩んでおります。
ご教授いただきたく、よろしくお願いいたします。
VB.NET は見慣れていないので C# に書き換えて実行したところ、成功してしまいました。

気になったのは

> If FormA.insertView(strA, strB, strC, strD, intCnt - 1) = False Then

の部分ですが、この FormA の参照は正しいですか?
VB 特有の "Form の暗黙的なインスタンス化" が原因でないか心配です。

(FormB で項目を選択していなかった なんて事ないですよね?)
2008/01/17(Thu) 16:59:57 編集(投稿者)

■No21271に返信(beniさんの記事)
Ruku さんにかぶったけど><
FormB から設定するメソッド
>  If FormA.insertView(strA, strB, strC, strD, intCnt - 1) = False Then
の直前に
  FormA.Show
と入れて別の FormA が表示されるようなら、インスタンスの管理について勉強してください。
Rukuさん、るしぇさん、ご教授ありがとうございます。

■No21272に返信(Rukuさんの記事)
> 気になったのは
>>If FormA.insertView(strA, strB, strC, strD, intCnt - 1) = False Then
> の部分ですが、この FormA の参照は正しいですか?
> VB 特有の "Form の暗黙的なインスタンス化" が原因でないか心配です。

■No21273に返信(るしぇさんの記事)
> 2008/01/17(Thu) 16:59:57 編集(投稿者)
> FormB から設定するメソッド
> >  If FormA.insertView(strA, strB, strC, strD, intCnt - 1) = False Then
> の直前に
>   FormA.Show
> と入れて別の FormA が表示されるようなら、インスタンスの管理について勉強してください。

ご指摘いただきましたとおり、違うFormAが複数起動しました><
インスタンスの管理について全く勉強しておらず、起動している画面が参照されるものと考えておりました。
> >  If FormA.insertView(strA, strB, strC, strD, intCnt - 1) = False Then
の記述を
If My.Forms.FormA.insertView(strA, strB, strC, strD, intCnt - 1) = False Then
に変更した所、意図していた処理が行えるようになりました。

大変勉強になりました。
お忙しい折、ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板