とを使用してDialogResult
の項目を更新:Form2
Form3
Form1
// on Form1
using(var form2 = new Form2(item))
{
if (form2.ShowDialog() == DialogResult.OK)
{
// update items
}
}
ユーザーのアクションに応じて、プロパティを などに設定しますForm2
。たとえば、ユーザーがアイテムを削除した場合、結果を次のように設定します。DialogResult
DialogResult.OK
DialogResult.Cancel
DialogResult.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; }
}
EventHandler
type のイベント、 typeの引数に関するこれらすべての Microsoft ガイドラインに従いたくない場合は、EventArgs
type の単純なイベントを使用できますAction<int>
。
public event Action<int> ItemDeleted;
そして、このように上げます:
if (ItemDeleted != null)
ItemDelted(itemId);