とを使用してDialogResultの項目を更新:Form2Form3Form1
// on Form1
using(var form2 = new Form2(item))
{
if (form2.ShowDialog() == DialogResult.OK)
{
// update items
}
}
ユーザーのアクションに応じて、プロパティを などに設定しますForm2。たとえば、ユーザーがアイテムを削除した場合、結果を次のように設定します。DialogResultDialogResult.OKDialogResult.CancelDialogResult.OK
// on Form2
private void btnDelete_Click(object sender, EventArgs e)
{
// delete item from db
DialogResult = DialogResult.OK;
}
更新 - 両方のフォームを開いたままにしたい場合はForm2、ダイアログとして表示できず、上記のコードは機能しません。次のイベントを宣言する必要がありますForm2。
// on Form2
public event EventHandler<ItemDeletedEventArgs> ItemDeleted;
public Form2(List<Item> items)
{
...
}
private void btnDelete_Click(object sender, EventArgs e)
{
// delete item from db
OnItemDeleted(itemId)
}
protected void OnItemDeleted(int itemId)
{
if (ItemDeleted == null)
return;
ItemDeleted(this, new ItemDeletedEventArgs(itemId));
}
でこのイベントに登録Form1:
private void form2_ItemDeleted(object sender, ItemDeletedEventArgs e)
{
int itemId = e.ItemId;
// update items
}
ItemDeletedEventArgsから継承されたカスタム クラスはどこにありますかEventArgs:
public class ItemDeletedEventArgs : EventArgs
{
public ItemDeletedEventArgs(int itemId);
{
ItemId = itemId;
}
public int ItemId { get; private set; }
}
EventHandlertype のイベント、 typeの引数に関するこれらすべての Microsoft ガイドラインに従いたくない場合は、EventArgstype の単純なイベントを使用できますAction<int>。
public event Action<int> ItemDeleted;
そして、このように上げます:
if (ItemDeleted != null)
ItemDelted(itemId);