私のクラスには多くのプロパティが含まれており、それぞれのプロパティを処理する必要があります。配列のプロパティが変更されたときにどのように通知されますか?
はこの下記を参照してください:
public partial class my_form : Form
{
private Image[] _imagelist;
public Image[] imagelist
{
get
{
return _imagelist;
}
set
{
this._imagelist = value;
this.on_imagelist_changed();
}
}
private void on_imagelist_changed()
{
// do something.
}
private void button1_Click(object sender, EventArgs e)
{
/* set new imagelist */
this.imagelist = getimagelist();
}
}
はい、それは仕事の罰金です。
しかし、私はこのように呼びます。
public partial class my_form
{
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
{
int selectedIndex = this.listView1.SelectedItems[0].ImageIndex;
this.imagelist[selectedIndex] = dosomething(this.imagelist[selectedIndex]);
}
}
on_imagelist_changed()
を呼び出しません。どうして ?
このようなインデクサーでプロパティを追加することはできません。 :(
public partial class my_form
{
public Image imagelist[int x]
{
get
{
return _imagelist[x];
}
set
{
this._imagelist[x] = value;
this.on_imagelist_changed();
}
}
}
誰も私がこの問題の解決に役立つことはできますか?
は、私はこのC# Indexersのようなコントロールクラスを作るために避けることはできますか?
私はいくつかの提案を設立し、彼らは私がObservableCollectionを試してみましょう語った。Iこれについて理解していない。私のために誰かの一例であってよい?
ちょうどリストの代わりに、アレイ(私的リスト _IMAGELIST; パブリック静的リストイメージリスト)を使用します。あなたができない理由this.imagelist [selectedIndex] = dosomething(this.imagelist [selectedIndex]);配列が初期化されていないためです(代わりにリストを使用することをお勧めします)。imagelist = new List ();初期化するために –
Innat3
@ Innat3配列は初期化されています。クラッシュ。エラーはクラッシュではありませんが、イベントが「発射」していないという事実です。 – dasblinkenlight