とりこらぼ。

Learn from yesterday,
live for today,
hope for tomorrow.

目次

Blog 利用状況

ニュース

プロフィール

  • 名前:とりこびと
    とるに足らない人間です。

  • Wankuma MVP
    for '平々凡々'

Web Site

  • Memo(Of T)

もうひとつの Blog

広告っぽい

書庫

日記カテゴリ

データバインディングのおべんきょ。その5。

データバインディングのおべんきょ。その4。

前回のあらすじ

あ、あ、あれ? 'とりこびと' いないぢゃん!(ToT)

なんとも切ないお話です。もちろん涙が止まりません。バインドしたリストにプログラムコードから新しく追加しても ComboBox1 に反映されませんでした。

なんとかこの問題もズバッと解決したいところですね。いろいろ調べた結果、いくつか方法があるようですので順番に書いていきますね。

まず、一つ目です。さくっと書きます。

List クラス使うのやめちゃう!

ええ、とてもつらいです。つらいですが、仕方ありません。List クラス単独では難しそうなんですもの。なぜかって?

IBindingList インターフェイスを実装してないからです。

MSDN だとこちら↓。

MSDN:IBindingList インターフェイス(http://msdn2.microsoft.com/ja-jp/library/system.componentmodel.ibindinglist(VS.80).aspx)

どうやら、IBindingList インターフェイス の メンバ ListChanged イベントがリストの変更通知としての機能を果たすようですね。で、なんかそれっぽいクラスはないかな~って探してみると・・・

MSDN:BindingList クラス(http://msdn2.microsoft.com/ja-jp/library/ms132679(VS.80).aspx)


いいもん持ってんじゃねーか♪


ええまったく、.NET Framework のクラスライブラリっていろんなクラスがありますね。

前回使用した Form1 のコードを以下のように修正します。

Imports System
Imports System.Collections.Generic
Imports System.ComponentModel


Public Class Form1

    Private _entertainerList As BindingList(Of WankumaEntertainer)

    Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles MyBase.Load
        Me._entertainerList = New BindingList(Of WankumaEntertainer)         Me._entertainerList.RaiseListChangedEvents = True
        Me._entertainerList.Add(New WankumaEntertainer("ぽぴ王子"))         Me._entertainerList.Add(New WankumaEntertainer("アクア"))         Me._entertainerList.Add(New WankumaEntertainer("R・田中一郎"))
        Me.ComboBox1.DataSource = Me._entertainerList         Me.ComboBox1.DisplayMember = "Name"
    End Sub

    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Me._entertainerList.Add(New WankumaEntertainer("とりこびと"))
    End Sub

End Class

前回 List クラスしていた部分を BindingList に変更しただけですね。RaiseListChangedEvents プロパティは ListChanged イベントを発生させるかどうかを設定できるようです。なので今回は 発生させたいので True にしてあります。(あ、System.ComponentModel を Imports してます。BindingList クラスはSystem.ComponentModel 名前空間にありますので。)

作業はこれでおしまいです。早速実行してみてください。前回、Button1 をクリックすると _entertainerList に新しく 'とりこびと' という Name プロパティ に設定された WankumaEntertainer を追加するコードになっていました。その Button1 をクリックして ComboBox1 のリストが変更されるか確認してみましょう。


新しい自分(とりこびと)がいる!!


というわけで、BindingList クラスというとっても便利なクラスを使用する方法でリストの変更をコントロールに通知する方法でした。




・・・って、今回はそう簡単には終わらせないぞ!フヒヒ


というのも、リストの変更は通知されるようになりましたが、リストの要素の変更はどうでしょう?今回だと _entertainerList に含まれる WankumaEntertainer クラスのインスタンスの Name プロパティが変更された場合、ちゃんと変更されるでしょうか?

ちょっと試してみましょう。デザイナから Form1 にButton を一つ追加して(Button2 で。)Form1 を以下のように変更します。

Imports System
Imports System.Collections.Generic
Imports System.ComponentModel


Public Class Form1

    Private _entertainerList As BindingList(Of WankumaEntertainer)

    Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles MyBase.Load
        Me._entertainerList = New BindingList(Of WankumaEntertainer)         Me._entertainerList.RaiseListChangedEvents = True
        Me._entertainerList.Add(New WankumaEntertainer("ぽぴ王子"))         Me._entertainerList.Add(New WankumaEntertainer("アクア"))         Me._entertainerList.Add(New WankumaEntertainer("R・田中一郎"))
        Me.ComboBox1.DataSource = Me._entertainerList         Me.ComboBox1.DisplayMember = "Name"
    End Sub

    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Me._entertainerList.Add(New WankumaEntertainer("とりこびと"))
    End Sub

    ' 書き加えた部分。     Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button2.Click
        For Each entertainer As WankumaEntertainer In Me._entertainerList
            If entertainer.Name = "とりこびと" Then
                entertainer.Name = "とりこびと(仮)"
            End If
        Next
    End Sub
End Class

Button2 をクリックすると _entertainerList に 'とりこびと' という Name プロパティ に設定された WankumaEntertainer クラスのインスタンスがあれば、そのName プロパティを'とりこびと(仮)'に変更するコードです。

ではでは、実行してみましょう。Button1 をクリックして 'とりこびと' を追加し、Button2 をクリックして変更してみてください。でもってその後 ComboBox1 のリストを確認してみてください。


うひぃ~!変化なし!!(ToT)


そうです。プログラムコードから_entertainerList の要素の変更に対して行った変更が反映されません。・・・またまた困りましたね。



・・・と、困ったところで今回も次回につ・づ・く♪

投稿日時 : 2007年5月30日 14:13

Feedback

# re: データバインディングのおべんきょ。その5。 2007/05/30 15:14 かずくん

> いいもん持ってんじゃねーか♪
Framework1.0「なんだよ。どいつもこいつも、Framework2.0ばかりひいきしやがって」
Framework1.1「そうそう、俺らの頃なんかよー。DateSetを一度nullにしてから、再セットしたってのによー」
Framework1.0「それが今じゃ、BindingListで、ホイ!って。まったく、やってられねーよ。」
Framework1.1「くそ、Framework2.0のこと考えてたら、また腹たってきたわ。」

#先輩たちの会話....

# re: データバインディングのおべんきょ。その5。 2007/05/30 17:18 とりこびと

かずくんさん、コメントありがとうございます。

ねたみはいじめの要因になりうる・・・とwww

実際.NET Framework 2.0 触ってみるともう先輩には戻りたくない症候群になりますたw

# データバインディングのおべんきょ。その6。 2007/05/30 17:35 とりこびと ぶろぐ。

データバインディングのおべんきょ。その6。

# データバインディングのおべんきょ。その8。 2007/05/31 10:19 とりこびと ぶろぐ。

データバインディングのおべんきょ。その8。

# PVAaZsWTfABy 2011/12/22 21:29 http://www.discreetpharmacist.com/

XsYTVg Pleased to read intelligent thoughts in Russian. I`ve been living in England for already 5 years!...

# mNYOWQmZrXwkkbBzHpi 2011/12/29 21:29 http://4iu.org/

Are you interested in webmaster`s income?!...

# blonde lace wigs 2018/08/04 2:25 ohirvmji@aol.com

These blonde lace wigs https://youtu.be/3KO3e4I3_24 are so wonderful I'm buying another an individual for the friend's birthday.

# If you want to increase your familiarity simply keep visiting this website and be updated with the most recent news posted here. 2019/05/30 10:22 If you want to increase your familiarity simply ke

If you want to increase your familiarity simply keep visiting
this website and be updated with the most recent news posted here.

# Good day! I know this is somewhat off topic but I was wondering which blog platform are you using for this website? I'm getting fed up of Wordpress because I've had problems with hackers and I'm looking at options for another platform. I would be awesom 2019/06/06 19:50 Good day! I know this is somewhat off topic but I

Good day! I know this is somewhat off topic but I was wondering which
blog platform are you using for this website? I'm getting fed up of Wordpress because I've had problems with hackers and I'm looking at options
for another platform. I would be awesome if you could point me in the
direction of a good platform.

# Have you ever thought about including a little bit more than just your articles? I mean, what you say is important and everything. However think about if you added some great images or video clips to give your posts more, "pop"! Your content is 2019/08/24 20:46 Have you ever thought about including a little bit

Have you ever thought about including a little bit
more than just your articles? I mean, what you say is important and
everything. However think about if you added some great
images or video clips to give your posts more, "pop"! Your content is excellent but with pics and clips, this site could certainly be one of the
greatest in its niche. Wonderful blog!

# Its like you read my mind! You seem to know a lot about this, like you wrote the book in it or something. I think that you could do with some pics to drive the message home a bit, but instead of that, this is wonderful blog. An excellent read. I'll cert 2019/09/08 14:10 Its like you read my mind! You seem to know a lot

Its like you read my mind! You seem to know a
lot about this, like you wrote the book in it
or something. I think that you could do with some pics to drive
the message home a bit, but instead of that, this is wonderful blog.
An excellent read. I'll certainly be back.

# Hi there friends, its great piece of writing about teachingand entirely explained, keep it up all the time. 2019/10/14 16:44 Hi there friends, its great piece of writing about

Hi there friends, its great piece of writing about teachingand entirely
explained, keep it up all the time.

# This is the perfect website for anyone who hopes to understand this topic. You understand so much its almost hard to argue with you (not that I personally would want to…HaHa). You certainly put a new spin on a topic which has been discussed for decades. W 2019/11/11 9:48 This is the perfect website for anyone who hopes t

This is the perfect website for anyone who hopes to understand this topic.
You understand so much its almost hard to argue with you (not that I personally would
want to…HaHa). You certainly put a new spin on a topic which has been discussed for decades.

Wonderful stuff, just excellent!

# 8 When offloaded, the HLP Lastly, add 9 2019/12/31 21:36 Typicalcat57

https://direitoaprendido.com.br/%ef%bb%bfmost-used-seniors-online-dating-website-no-fee/ australia iranian mature singles dating online site http://anubha-yoga.com/no-fee-biggest-seniors-online-dating-service-blogs.wankuma.com.pdf most secure mature dating online service free month

# 0 He was Open: On March 26th, 7 2020/01/01 3:42 Typicalcat26

http://www.hanhanstyles.com/%ef%bb%bfno-subscription-needed-best-seniors-dating-online-service/ where to meet disabled seniors in the uk http://birlikte.info/no-monthly-fee-mature-dating-online-sites-blogs.wankuma.com.pdf where to meet russian seniors in florida

# Simply want to say your article is as astonishing. The clearness for your publish is simply excellent and i can assume you're knowledgeable in this subject. Fine along with your permission allow me to clutch your feed to stay updated with coming near ne 2020/01/07 21:30 Simply want to say your article is as astonishing.

Simply want to say your article is as astonishing. The clearness for your publish is simply excellent and i can assume you're
knowledgeable in this subject. Fine along with your permission allow
me to clutch your feed to stay updated with coming near near post.
Thanks one million and please carry on the rewarding work.

# I visited multiple blogs however the audio feature for audio songs existing at this web page is truly wonderful. 2020/01/15 15:35 I visited multiple blogs however the audio feature

I visited multiple blogs however the audio feature for audio songs existing at this web page is truly wonderful.

タイトル  
名前  
Url
コメント