내 프로젝트에서 구현 한 쉽고 깨끗한 솔루션은 사용자가 원하는 입력을 할 때 발생하는 콜백 함수 (C#의 Action<T>
)를 사용하는 것입니다. 이 ShowDialog를 사용
예 :
private void cmdGetList_Click(object sender, EventArgs e)
{
string strInput = "";
frmInputBox frmDialog = new frmInputBox("User input:");
if (frmDialog.ShowDialog() == DialogResult.OK)
strInput = frmDialog.prpResult;
else
strInput = null;
}
는 MDI 기본 폼의 외부 입력 상자.
지금; 표시를 사용하여 용액 :
private void cmdGetList_Click(object sender, EventArgs e)
{
getInput(this, (string strResult) =>
{
MessageBox.Show(strResult);
});
}
private void getInput(Form frmParent, Action<string> callback)
{
// CUSTOM INPUT BOX
frmInputBox frmDialog = new frmInputBox("User input:");
// EVENT TO DISPOSE THE FORM
frmDialog.FormClosed += (object closeSender, FormClosedEventArgs closeE) =>
{
frmDialog.Dispose();
frmDialog = null;
};
frmDialog.MdiParent = frmParent; // Previosuly I set => frmParent.IsMdiContainer = true;
// frmDialog.ShowDialog(); <== WILL RAISE AN ERROR
// INSTEAD OF:
frmDialog.MdiParent = frmParent;
frmDialog.FormClosing += (object sender, FormClosingEventArgs e) =>
{
if (frmDialog.DialogResult == DialogResult.OK)
callback(frmDialog.prpResult);
else
callback(null);
};
frmDialog.Show();
}
입력 상자 (또는 MDI 부모 폼 안에 표시 어떤 형태) 
트릭 때 관리하기위한 콜백 함수 (C 번호에 대한 조치)를 사용하는 사용자가 입력합니다.
코드 라인이 많지만 깨끗한 프로젝트를 표시하는 것은 가치가 없습니다. 
양식의 MdiParent 속성을 설정하지 않으면 ShowDialog()가 정상적으로 작동합니다. –