이상하게 들리 겠지만, 이것은 취미 생활 일뿐입니다. 나는 (사용자 정의) 메시지 상자에 이상적으로 코드를 차단해야하는 YesNo 버튼을 팝업으로 표시하고 싶습니다. 하지만 메시지 상자의 버튼을 특별히 클릭 할 필요없이 메시지 상자를 닫을 수 있도록 상위 폼을 클릭 할 수 있어야합니다. (메시지 상자에서 아니오를 클릭하는 것과 같습니다)모달이 아닌 양식을 만드는 방법은 무엇입니까?
void Foo()
{
CustomMsgBox.Show("do you really wanna delete?", CustomMsgBox.Buttons.YesNo);
//block the code here, but user should be able to click on form, so that its equivalent to have clicked No;
//if clicked No, return;
//delete.
}
그래서 내가 생각한 해결책은 사용자 지정 메시지 상자를 모달이 아닌 것입니다. 사용자가 양식을 클릭 할 수 있지만 코드를 차단할 수는 없습니다. 어떻게 할 수 있습니까?
그 결과는 다음과 같습니다
void Foo()
{
NonModalMsgBox.Show("do you really wanna delete?", CustomMsgBox.Buttons.YesNo);
//block thread till user clicks on form or messagebox buttons.
//unblock when user clicks.
//if No, return;
//delete.
}
편집 :이 표준 방법이 아닙니다 알고 모달 폼이 할 동안은 차단하지 않는 비 모달 양식을 알고있다. 따라서 모달 양식 또는 모달이 아닌 양식의 동작에 만족할 것을 권장하지 마십시오. 내 질문은 Windows 양식을 사용하여 ContextMenu의 동작을 시뮬레이트하는 방법이있을 것입니다.
재진입 할 가능성이 있기 때문에 불가능합니다. – SLaks
이것이 궁극적으로 불가능하다고 나는 생각하지 않는다. 스레드를 무기한 차단할 수 있지만 주 폼도 고정됩니다. 내 걱정입니다. 더 많은 지식이있는 사람들이 주위에 일을 제공 할 수 있기를 바랍니다. 나는 기본적으로 .net의 다양한 측면을 가지고 놀고 있습니다 .. 어떻게하면 이것이 성취 될 수 있는지 알고 있어야합니다. – nawfal
이것은 Application.DoEvents()를 호출하는 루프가 필요합니다. 그 방법에 위험 요소가 붙어 있습니다. http://stackoverflow.com/questions/5181777/use-of-application-doevents/5183623#5183623 –