リストに項目を追加するためだけに、あるフォームから別のフォームを参照しないでください。:)
上記の Rex の回答から構築すると、ドメイン イベント パターン ( http://www.martinfowler.com/eaaDev/DomainEvent.html )を実装できます。
単純な (基本的な) 実装には、イベント/イベントの発生を管理するシングルトン クラスがあります。
using System;
/// <summary>
/// Class representing a single source for domain events within an application.
/// </summary>
public class DomainEventSource
{
#region Fields
private static readonly Lazy<DomainEventSource> source = new Lazy<DomainEventSource>( () => new DomainEventSource() );
#endregion
#region Properties
/// <summary>
/// Gets a reference to the singleton instance of the <see cref="DopmainEventSource"/> class.
/// </summary>
/// <value> A<see cref="DomainEventSource"/> object.</value>
public static DomainEventSource Instance
{
get
{
return source.Value;
}
}
#endregion
#region Methods
/// <summary>
/// Method called to indicate an event should be triggered with a given item name.
/// </summary>
/// <param name="name">A <see cref="string"/> value.</param>
public void FireEvent( string name )
{
if ( this.AddItem != null )
{
this.AddItem( source, new AddItemEvent( name ) );
}
}
#endregion
#region Events
/// <summary>
/// Event raised when add item is needed.
/// </summary>
public EventHandler<AddItemEvent> AddItem;
#endregion
}
そして、次のようなイベントを配線して呼び出します。
DomainEventSource.Instance.AddItem += ( s, a ) => Console.WriteLine( "Event fired with name: " + a.ItemName );
DomainEventSource.Instance.FireEvent( "モノ" );
これにより、イベントはメモリ リークの簡単な原因になることに注意する必要があります。これを登録した場合は、必ず登録を解除してください。