我想检查点击了哪个按钮

时间:2013-03-07 22:11:10

标签: c# winforms visual-studio-2010 file-io

现在我有一个将文件复制到另一个目录的主表单。

我想在catch语句中处理“已存在同名文件”的情况。

我希望通过弹出另一个窗口询问是否更换或保留按钮来完成此操作。然后使用if语句检查单击了哪个按钮

当前代码:

        catch (IOException x)
            {
                Copy copy = new Copy();
                copy.ShowDialog();
            }

目标:

        catch (IOException x)
            {
                Copy copy = new Copy();
                copy.ShowDialog();

                    if (//Replace button was clicked)
                        do this
                    else if (//Keep button was clicked)
                        do this
            }

我似乎找不到用于此目的的方法。

6 个答案:

答案 0 :(得分:3)

单击按钮时,可以使“复制”对话框返回DialogResult。例如,您可以使用DialogRsult.OK作为替换按钮,使用DialogResult.Cancel作为保留按钮。像这样:

单击“复制”对话框中的“替换”按钮,可以在Replace_Click事件处理程序

中进行设置
this.DialogResult = DialogResult.OK;
this.Close();

以与DialogResult.Cancel事件处理程序

中的Keep_Click类似的方式设置

您可以像这样调用对话框:

Copy copy = new Copy();
DialogResult dr = copy.ShowDialog();  

if(dr == DialogResult.OK)
    //Replace clicked
else if(dr == DialogResult.Cancel)
    //Keep clicked

答案 1 :(得分:1)

您应该考虑使用DialogResult类。

你想要这样的东西:

catch (IOException x)
{
   DialogResult dr = new DialogResult ();
   dr.ShowDialog(); 

   if (dr == DialogResult.OK)
      MessageBox.Show ("File replaced.");

   else if (dr == DialogResult.Cancel)
      MessageBox.Show ("File kept.");
}

答案 2 :(得分:1)

不要使用例外来处理这种情况 只测试文件是否存在并使用带有YesNo按钮的简单MessageBox

sourceFile = "Your_Source_File_To_Copy";
string destFile = Path.Combine(destFolder, Path.GetFileName(sourceFile));
if(File.Exists(destFile))
{
    DialogResult dr = MessageBox.Show("File already exist! Do you wish to overwrite?", 
                                      "Warning!",
                                      MessageBoxButtons.YesNo);
    if(dr == DialogResult.Yes)
         // Overwrite
    else
         // Do something else
}

作为Mr Lippert says in this answer

  

有例外   帮助您调试程序,而不是控制它的流程。

答案 3 :(得分:0)

您是否查看了Form.ShowDialog方法?

http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx

MSDN代码摘录:

public void ShowMyDialogBox()
{
   Form2 testDialog = new Form2();

   // Show testDialog as a modal dialog and determine if DialogResult = OK. 
   if (testDialog.ShowDialog(this) == DialogResult.OK)
   {
      // Read the contents of testDialog's TextBox. 
      this.txtResult.Text = testDialog.TextBox1.Text;
   }
   else
   {
      this.txtResult.Text = "Cancelled";
   }
   testDialog.Dispose();
}

答案 4 :(得分:0)

复制前检查文件是否存在:

    if (File.Exists(destFileName))
    {
        Copy copy = new Copy();
        System.Windows.Forms.DialogResult res = copy.ShowDialog();
        if (res == System.Windows.Forms.DialogResult.Yes)
            File.Copy(sourceFileName, destFileName, true);
    }
    else
    {
        File.Copy(sourceFileName, destFileName);
    }

还适当地在DialogResult表单中设置Copy属性。

答案 5 :(得分:0)

也许实现自己的结果就是你要找的。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var result = new Form2().ShowDialog();
        MessageBox.Show(result.ToString());
    }
}

public partial class Form2 : Form
{

    ButtonResult buttonResult;

    public Form2()
    {
        InitializeComponent();
    }

    public new ButtonResult ShowDialog()
    {
        base.ShowDialog();
        return buttonResult;
    }

    private void KeepButton_Click(object sender, EventArgs e)
    {
        buttonResult = ButtonResult.Keep;
        this.Close();
    }

    private void ReplaceButton_Click(object sender, EventArgs e)
    {
        buttonResult = ButtonResult.Replace;
        this.Close();
    }
}

public enum ButtonResult
{
    None = 0,
    Keep = 1,
    Replace = 2,
}