现在我有一个将文件复制到另一个目录的主表单。
我想在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
}
我似乎找不到用于此目的的方法。
答案 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)
也许实现自己的结果就是你要找的。 p>
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,
}