2014-01-19 5 views
2
public int dialog() 
{ 
    Form prompt = new Form(); // creates form 

    //dimensions 
    prompt.Width = 300; 
    prompt.Height = 125; 

    prompt.Text = "Adding Rows"; // title 

    Label amountLabel = new Label() { Left = 75, Top = 0, Text = "Enter a number" }; // label for prompt 
    amountLabel.Font = new Font("Microsoft Sans Serif", 9.75F); 
    TextBox value = new TextBox() { Left = 50, Top = 25, Width = prompt.Width/2 }; // text box for prompt 
    //value.Focus(); 
    Button confirmation = new Button() { Text = "Ok", Left = prompt.Width/2 - 50, Width = 50, Top = 50 }; // ok button 
    confirmation.Click += (sender, e) => { prompt.Close(); }; // if clicked it will close 

    prompt.AcceptButton = confirmation; 

    // adding the controls 
    prompt.Controls.Add(value); 
    prompt.Controls.Add(confirmation); 
    prompt.Controls.Add(amountLabel); 
    prompt.ShowDialog(); 

    int num; 
    Int32.TryParse(value.Text, out num); 
    return num; 
} 

내 프롬프트이므로 버튼을 닫아서 닫을 수 있습니다. 이제는 이전에이 질문에 답을 얻었으나 기본 양식을 사용하고 있기 때문입니다.사용자가 ESC 버튼을 눌렀을 때 내 프롬프트를 닫으려면 어떻게해야합니까?

이것은 내 CancelButton이며 무엇을 할 것입니다.

prompt.CancelButton = this.Close(); // not working 

그러나 다른 클래스를 사용하지 않습니다. 나는 같은 수업을 사용하고있다. 닫힌 경우 버튼을 닫으려면 1 속성/속성 (속성 섹션에서 시각적으로 편집하지 않고)은 어떻게됩니까?

+0

재미있는 : 여기 – pcnThird

답변

3

은이 취소 버튼을 배치하지 않고 모델 양식 이스케이프 버튼을 눌러 사용하여 폼을 닫습니다하는 또 다른 방법입니다. 한가지 주목할 점은이 메서드는 정수를 반환하기 때문에 여전히 값이 반환된다는 것입니다. `prompt '가 닫히더라도 (취소를 통해), 텍스트 상자의 값이 반환됩니다. Btw,`CancelButton` 속성은 일반적으로`Button`을 가리키고`this.Close()`가 버튼이라고 생각하지 않습니다 :)
+1

키를 눌러도 아무 것도 닫히지 않습니다. – Steve

+0

오, 맞아, 지금 고쳐 줄게 :)) –

+1

Tnx @ 그것을 지적하기위한 증거. –

2

취소와 폐쇄 및 확인과 폐쇄를 구별해야하는 경우, 다음의 필요성이 개 별도의 버튼

Button cancellation = new Button() 
{ Text = "Cancel", Left = prompt.Width/2 + 10, Width = 50, Top = 50 }; 

prompt.CancelButton = cancellation; 
cancellation.DialogResult = DialogResult.Cancel; 

은 또한 당신의 확인 버튼을 DialogResult를 속성에 대한 설정이 필요

confirmation.DialogResult = DialogResult.OK; 

그래서 당신에게 ShowDialog의 결과는

if(DialogResult.OK == prompt.ShowDialog()) 
{ 
    int num; 
    Int32.TryParse(value.Text, out num); 
    return num; 
} 
else 
    return 0; // Or whatever to signal failure 

그런데 DialogResult 속성을 DialogResult.None과 다른 값으로 설정하면 폼을 닫을 때 click 이벤트가 필요없이 폼 자체가 닫힙니다.

prompt.KeyPreview = true; 
prompt.KeyDown += (sender, e) => 
{ 
    if (e.KeyCode == Keys.Escape) prompt.DialogResult = DialogResult.Cancel; // you can also call prompt.Close() here 
}; 
+0

나는 +1 할 것이지만 일일 한도에 도달했습니다. 나는 번호 신호를 취소하는 것을 생각하지 않았다. – pcnThird

+0

끝에'prompt.Controls.Add (cancellation);'을 추가했는데, 사실은 취소 될 것이지만 다른 것을 열 것이다. 그 프롬프트를 닫는 것과 같습니다. – puretppc

+0

위의 코드로이 문제를 재현 할 수 없습니다. – Steve