为弹出窗口设置取消按钮

本文关键字:取消 按钮 设置 窗口 | 更新日期: 2023-09-27 18:01:21

我正在实现一个需要输入的弹出窗口。所以它包含一个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事件应该只发生两次,每次我按下OK按钮时,'a'的值增加1,所以当我按下取消按钮时,即使'a'增加1,在这种情况下,我只能输入一次值。所以当我按下取消按钮时a的值应该减少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
    }
}

你的弹出窗口是派生自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);
    }

不要尽可能多地发明双重事件或类似的东西,因为这是混乱的第一步。

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

如果这不是你想要的,请更好地解释。问候。