结束操作

时间:2016-09-21 08:12:56

标签: c# .net winforms

我有一个相当有趣的问题,但我是C#的新手。所以请帮忙。在我的程序中有一个带按钮的主窗体。当我点击此按钮时,会出现另一个表单。这个子表单有一个" back"按钮和"保存"按钮。当我点击"保存"保存数据并打开浏览器,以便我可以选择一个文件。当我点击"返回"它应该关闭子表单。我的问题是我无法做到"停止"那里。关闭子窗体后(尽管使用"返回")它继续转到主窗体中用于打开浏览器的方法,然后一直持续到另一个"如果"是假的。我怎么能让它停在那里? (顺便说一句,开放浏览器方法以主窗体形式编写的原因是有几个子窗体需要从主窗体打开,所有子窗体都具有相同的样式)。 编辑: 在子表单(GuaranteesForm)中我有

private void btnBack_Click(object sender, EventArgs e)
        {
            this.Close();
            MessageBox.Show("No Data was saved");
            return;
        }`

然后它进入主要形式:

private void button8_Click(object sender, EventArgs e)
        {
            try
            {
                GuaranteesForm frm = new    GuaranteesForm(Convert.ToInt32(txtProjectReferenceCode.Text),
                    txtIndent.Text, 7, "");
                frm.ShowDialog();
                lblId.Text = _entit.C02_ProjectDocuments.OrderByDescending(i => i.ID).First().ID.ToString();
                UploadFirst();
                lblId.Text = "";
                RefreshData();
            }
            catch (Exception)
            { }

        }

然后是第一次加载的方法:

  private void UploadFirst()
    {

            OpenFileDialog opf = new OpenFileDialog { Multiselect = true };
            opf.ShowDialog();


            if ((opf.FileNames.Any()))
            {
                tempDictionary.Clear();

                foreach (var fileName in opf.FileNames)
                {
                    FileInfo f = new FileInfo(fileName);
                    lstFile.Items.Add(f.Name);
                    tempDictionary.Add(f.FullName, f.Name);
                }
            }
            else
            {

                MessageBox.Show("File Was NOT saved !");
                return;
            }

如果我按回它打开浏览器然后我关闭浏览器并显示:文件未保存

2 个答案:

答案 0 :(得分:0)

ShowDialog方法挂起当前方法,直到该对话框关闭,然后继续挂起的方法。主表单上的return方法中的btnBack_Click语句无效 - 您需要告诉主表单用户已决定的内容。这可以使用DialogResult属性完成。

相反在对话框中使用this.Close(),使用DialogResult = DialogResult.Cancel

private void btnBack_Click(object sender, EventArgs e)
{
    MessageBox.Show("No Data was saved");
    DialogResult = DialogResult.Cancel; // this also closes the dialog
}

导致文件保存的按钮的事件处理程序中,使用DialogResult = DialogResult.OK代替Close()

private void btnSave_Click(object sender, EventArgs e)
{
    DialogResult = DialogResult.OK; // this also closes the dialog
}

然后在主表单中,您可以根据用户的决定采取行动:

if (frm.ShowDialog() != DialogResult.OK)
{
    // bail out
    return;
}

// continue showing the browser and saving the file

PS。 Button具有DialogResult属性,该属性会自动设置对话框结果,并在其格式为DialogResult.None以外时关闭该表单,而不需要Click事件处理程序。

答案 1 :(得分:0)

您应该在" save"中调用子窗体中的uploadfirst()方法。按钮事件处理程序从"按钮8"中删除它eventhandler