2

每当我取消 OpenFileDialog 框时。它给出了一个错误路径是空的。我的打开文件对话框

有什么方法可以为 OpenFileDialog 的取消按钮和关闭按钮编写代码

我的代码:

       private void button4_Click(object sender, EventArgs e)
        {
            string s = image_print() + Print_image();
            PrintFactory.sendTextToLPT1(s); / sending to serial port
        }

        private string image_print()
        {
            OpenFileDialog ofd = new OpenFileDialog();
            string path = "";
            string full_path = "";
            string filename_noext = "";
            ofd.InitialDirectory = @"C:\ZTOOLS\FONTS";
            ofd.Filter = "GRF files (*.grf)|*.grf";
            ofd.FilterIndex = 2;
            ofd.RestoreDirectory = true;

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                filename_noext = System.IO.Path.GetFileName(ofd.FileName);
                path = Path.GetFullPath(ofd.FileName);
                img_path.Text = filename_noext;
                //MessageBox.Show(filename_noext, "Filename");
                // MessageBox.Show(full_path, "path");
                //move file from location to debug
                string replacepath = @"E:\Debug";
                string fileName = System.IO.Path.GetFileName(path);
                string newpath = System.IO.Path.Combine(replacepath, fileName);
                if (!System.IO.File.Exists(filename_noext))
                    System.IO.File.Copy(path, newpath);
                
            }

            //tried using the below codes but not taking return statement. saying "An object of a type convertible to 'string' is required"

            if (ofd.ShowDialog() != DialogResult.OK)
                return;//---->> here its not taking return
              
            //when ever i press the cancel or close button it is going to below line. How to stop this
            StreamReader test2 = new StreamReader(img_path.Text);
            string s = test2.ReadToEnd();
            return s;
        }        

        private string Print_image()
        {
            //some codes that returns string value in s
            return s;
        }
4

2 回答 2

3

为什么不:

else语句避免了重复的逻辑,并且您返回一个空字符串,调用方法可以检查该字符串

if (ofd.ShowDialog() == DialogResult.OK)
{
    filename_noext = System.IO.Path.GetFileName(ofd.FileName);
    path = Path.GetFullPath(ofd.FileName);
    img_path.Text = filename_noext;
    // MessageBox.Show(filename_noext, "Filename");
    // MessageBox.Show(full_path, "path");
    // move file from location to debug
    string replacepath = @"E:\Debug";
    string fileName = System.IO.Path.GetFileName(path);
    string newpath = System.IO.Path.Combine(replacepath, fileName);
    if (!System.IO.File.Exists(filename_noext))
        System.IO.File.Copy(path, newpath);

}
else
{
    return String.Empty;
}
于 2014-10-20T17:17:45.893 回答
3
if (ofd.ShowDialog() != DialogResult.OK)
    return "";

它不起作用,因为您应该返回字符串!如果需要,您可以返回 null 并检查 null !

在你的方法中:

private void button4_Click(object sender, EventArgs e)
{
    if(image_print() == "")
    {
       return;
       //You can write a message here to tell the user something if you want.
    }

    string s = image_print() + Print_image();
    PrintFactory.sendTextToLPT1(s); / sending to serial port
}
于 2014-10-20T17:18:06.637 回答