Установите кнопку Отмена для окна POPup! - PullRequest
0 голосов
/ 07 июля 2011

Я реализую всплывающее окно, которое принимает входные данные. Так что оно содержит кнопку OK (кнопка отправки), а также кнопку отмены. Поэтому, когда я нажимаю кнопку OK, он принимает значения ввода, если я нажимаю кнопку отмены, он не долженпринять входные данные, но следует уменьшить значение на 1. Я объясню вам, почему так.Вот код всплывающей формы.

public partial class PopUp : Form {

    public PopUp()
    {
        InitializeComponent();
    }

    private void OK_Click(object sender, EventArgs e)
    {
        ((Scrollbar.Form1)this.Owner).OK_Click(textBox1.Text,textBox2.Text,textBox3.Text,textBox4.Text);
        this.Close();
    }

    private void Cancel_Click(object sender, EventArgs e)
    {

        ((Scrollbar.Form1)this.Owner).Cancel_Click();
        this.Close();
    }
}

и функции OK_click и cancel_click в моей основной форме.

public void OK_Click(string tbox1, string tbox2, string tbox3, string tbox4)
{
    g[b] = Int32.Parse(tbox1);
    h[b] = Int32.Parse(tbox2);
    i[b] = Int32.Parse(tbox3);
    j[b] = Int32.Parse(tbox4);
    b++;
}

public void Cancel_Click()
{

}


Form ChildForm = null;
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    if (a < 2)
    {
        ChildForm = new PopUp();
        ChildForm.ShowDialog(this); 
        l[a] = e.X;
        m[a] = e.Y;
        a++;
    }

}

событие Mouseup должно происходить только два раза, каждый раз, когда я нажимаюкнопка «ОК» увеличивает значение «а» на единицу, поэтому, когда я нажимаю кнопку отмены, даже если «а» увеличивается на единицу, в этом случае я могу ввести значения только один раз. поэтому, когда я нажимаю значение кнопки «отмены», равное «а 'должно уменьшиться на единицу.Пожалуйста, предложите мне способ, как я могу реализовать событие мыши только два раза, даже после нажатия кнопки отмены. Спасибо заранее! *

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Вы реализуете всплывающее диалоговое окно все неправильно. Базовый Form объект имеет свойство DialogResult. Вы должны использовать это, чтобы определить свою логику в MainForm.

Во-первых, MyPopup:

// Set properties on your buttons either in VS Designer or programmatically
this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
// other properties

this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel;
// other properties

Затем в вашей главной форме:

// Display popup expecting a DialogResult.OK or DialogResult.Cancel
void ShowPopup ( )
{
    MyPopup popup = new MyPopup ( );

    if (popup.ShowDialog() == DialogResult.OK)
    {
        //  process popup textbox text values
    }
    else
    {
        //  process popup cancel action
    }
}
0 голосов
/ 07 июля 2011

Ваше всплывающее окно получено из формы, насколько я вижу. Самое простое решение - предотвратить закрытие формы при первом нажатии кнопки ОТМЕНА и сделать что-то еще, если я правильно понимаю вашу проблему - переопределить событие OnClosing формы, например:

    protected override void OnClosing(CancelEventArgs e)
    {
        // some decisional logic here 
        if(..condition...) 
            e.Cancel =true; //this will prevent the form from closing
        base.OnClosing(e);
    }

Не изобретайте двойные события или что-то подобное, насколько это возможно, так как это первый проход, чтобы запутаться.

Используйте «естественные» возможности фреймворка, который вы используете. Я думаю, что вам нужно будет немного изменить свой код для поддержки этого.

Если это не то, о чем вы просили, объясните лучше. С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...