设置POPup窗口的取消按钮!

时间:2011-07-07 10:38:13

标签: c# .net mouseevent

我正在实现一个接受输入的PopUp窗口。因此它包含一个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事件应该只发生两次,每次按下OK按钮时,'a'的值增加1,所以当我按下取消按钮时,即使'a'增加1,在这种情况下,我可以只输入一次值。因此,当我按下取消按钮时,'a'的值应减1。请告诉我如何在点击取消按钮后我只能实现鼠标启动事件两次。谢谢提前。!

2 个答案:

答案 0 :(得分:1)

您正在实施弹出式对话框。基础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

然后,在你的MainForm中:

// 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
    }
}

答案 1 :(得分:0)

您的弹出窗口是从Form中派生出来的,就像我看到的那样。最简单的解决方案是防止表单在第一次点击取消点击并制作其他内容,如果我理解你的问题,就是覆盖Form的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);
    }

不要尽可能多地发明双重事件或类似事件,因为这是第一次弄乱。

使用您使用的框架的“自然”可能性。我认为您需要重新安排一些代码来支持这一点。

如果这不是您所要求的,请更好地解释。 问候。