2014-01-19 4 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

Интересной. Одна вещь, которую я заметил, это то, что значение все равно будет возвращено, потому что этот метод возвращает целое число. Даже если 'prompt' закрыт (через отмену), значение в текстовом поле будет возвращено. Btw, свойство 'CancelButton' обычно относится к' Button', и я не думаю 'this.Close()' является кнопкой :) – pcnThird

ответ

3

Вот еще один способ закрыть форму нажатия кнопки спасай формы модели, не размещая любую кнопку отмены:

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

Это будет закрыто для любой клавиши. – Steve

+0

О, ты прав, я исправлю это сейчас :)) –

+1

Tnx @Steve для указания его. –

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 для закрытия формы.

+0

Я бы добавил +1, но я достиг своего дневного лимита. Я никогда не думал о том, чтобы сигнал номера был отменен. – pcnThird

+0

Я добавил 'prompt.Controls.Add (отмена);' в конце концов, но дело в том, что оно отменит, но оно просто откроет еще один. То же самое с закрытием этого приглашения. – puretppc

+0

Не удается воспроизвести эту проблему с помощью приведенного выше кода. – Steve

Смежные вопросы