Windows는 대화식이 아닌 개체를 반환하는 모달 대화 상자를 형성합니다.

StackOverflow https://stackoverflow.com/questions/239435

  •  04-07-2019
  •  | 
  •  

문제

나는 누군가가 나를 도울 수 있기를 바랐다.

winforms 응용 프로그램을 수행하고 있으며 값을 반환하는 모달 대화 상자 (form.showdialog)를 표시해야합니다 (사용자에게 값을 유발하고 객체에 랩핑).

나는 그 나중에 데이터를 읽기 위해 객체에 대한 참조를 제공하거나 어떤 형태의 공공 재산에 의존하기보다는이 작업을 수행하는 방법을 알 수 없습니다.

쇼 디 알로그가 다른 것을 돌려주고 싶지만 작동하지 않습니다. 이 작업을 수행하는 몇 가지 "좋은"방법입니까?

나는 문제가 새로운 것이 아니라고 확신하지만, 거의 아무도 Winforms를 더 이상하지 않는 것처럼 보이기 때문에 웹에서 어떤 지침도 찾을 수 없습니다.

도움이 되었습니까?

해결책

다음과 같이 양식에 정적 메소드를 추가하십시오.

public class MyDialog : Form
{
    // todo: think of a better method name :)
    public static MyObject ShowAndReturnObject() 
    {
        var dlg = new MyDialog();
        if (new dlg.ShowDialog() == DialogResult.OK) 
        {
            var obj = // construct an instance of MyObject from dlg
            return obj;
        }
        else
        {
           return null; 
        }
    }
}

이제 프로그램에서 이것을 호출 할 수 있습니다.

var myObject = MyDialog.ShowAndReturnObject();

... 그리고 대화 상자를 취소하면 myObject는 null이됩니다.

이제 모든 것을 말하면서, 나는 당신의 양식 수업에 속성을 추가 한 다음 showdialog ()를 호출 한 후 읽은 것보다 더 나은 접근법이라고 생각합니다.

다른 팁

대화 상자 내에서 반환 값을 나타내는 공공 속성을 만들 수 있습니다.

/* Caller Code */   
var dlg = new MyDialog();
if(dlg.ShowDialog() == DialogResult.OK)
  MessageBox.Show(dlg.MyResult);

/* Dialog Code */
public string MyResult { get { return textBox1.Text; } }

private void btnOk_Click(object sender, EventArgs e)
{
  DialogResult = System.Windows.Forms.DialogResult.OK;
  this.Close();
}

또는 기본적으로 Matt Hamilton이하는 일을하는 양식 클래스 내에서 새로운 showdialog 메소드를 만들 수 있습니다. 문제에서 많은 형태로하는 일이라면 확장 방법 일 수도 있습니다.

대화 양식의 공개 속성은 의미가 있습니다. 그러나 확인 버튼에서 대화 상자를 닫지 마십시오. 이벤트 핸들러를 클릭하십시오. Dialogresult 속성을 할당하면 대화 상자 양식이 숨겨집니다. 그런 다음 호출 양식에서 Dialogresult를 검사하여 OK 또는 취소가 클릭되었는지 확인할 수 있습니다. 그런 다음 OK 버튼을 클릭 한 다음 대화 상자 양식을 처리하면 공공 속성에 액세스 할 수 있습니다. 이는 호출 양식 또는 사용 명령문을 통해 트리 캐치-페인트 블록을 사용하여 수행해야합니다. 메모리 누출을 방지하려면 모달 대화 상자를 처리해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top