【问题标题】:How can I add a case, when I uploads a picture to a folder?当我将图片上传到文件夹时,如何添加案例?
【发布时间】:2020-11-12 08:08:55
【问题描述】:

我想制作一个图片库,我可以将图片上传到一个文件夹,然后在我的图片库中查看它们。目前我正在使用 switch 语句来更改图像,但我不知道如何将上传的图像添加到图库(在 switch 语句中添加一个新案例,使用我的图像路径)

图像转换器

private void ChangeImage(int num)
    {
        switch (num)
        {
            case 1:
                    Images.Image = Properties.Resources.wp;
                    imageTxt.Text = "Nice mountain";
                break;
            
            case 2:
                    Images.Image = Properties.Resources.wp1;
                    imageTxt.Text = "Nice mountain";
                break;
            
            case 3:
                    Images.Image = Properties.Resources.wp2;
                    imageTxt.Text = "Nice";
                break;
            
            case 4:
                    Images.Image = Properties.Resources.wp3;
                    imageTxt.Text = "Cool";
                break;
            
            case 5:
                    Images.Image = Properties.Resources.wp4;
                    imageTxt.Text = "Damn";
                break;

            case 6:
                    Images.Image = Properties.Resources.wp5;
                    imageTxt.Text = "Okay okay";
                break;

            case 7:
                    Images.Image = Image.FromFile(@"C:\Users\....\Resources\tree.jpg");
                    imageTxt.Text = "Okay okay";
                break;
        }
    }

保存 N 上传图片

    private void ImageUpload_Click(object sender, EventArgs e)
    {
        OpenFileDialog open = new OpenFileDialog();
        open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.png;)| *.jpg; *.jpeg; *.gif; *.png;";
        if (open.ShowDialog() == DialogResult.OK)
        {
            ImgDirectory.Text = open.FileName;
            picPreview.Image = new Bitmap(open.FileName);
        }
    }

    private void Save_Click(object sender, EventArgs e)
    {
        File.Copy(ImgDirectory.Text, Path.Combine(@"C:\Users\....\Resources\", Path.GetFileName(ImgDirectory.Text)));
        Update();
    }

【问题讨论】:

  • 请注意,[visual-studio] 标记保留用于有关 Visual Studio 的问题。我已经为你删除了。
  • switch/case 不适合这种情况。您可能需要考虑像 Dictionary 甚至 List 之类的东西可能就足够了......
  • 您遇到的问题是这种情况是编译时。您需要一个灵活的解决方案,这意味着使用内存结构。如果您只是调用ChangeImage 并增加num 的值(即1 2 3 4 5 6 7 等),那么Queue<something> 可能是一个很好的解决方案,因为您可以使下一个项目出队,尽管您可能需要创建一个包含图像源位置和要显示的字符串的类型。
  • 嘿@John,感谢您的时间和回答,我会看看它!再次感谢。

标签: c# winforms switch-statement


【解决方案1】:

您最好使用其他方法。比如使用Collections

public class UploadedImage
{
  public UploadImage(string inputPath, string inputName){
    imagePath = inputPath;
    imageName = inputName
  }
  string imagePath { get; set; }
  string imageName { get; set; }
}

声明

public List<UploadedImage> yourImages ;

将可用图像分配给 yourImages

yourImages = new List<UploadedImage>();
yourImages.Add(new UploadImage("wp", "Nice mountain"));
yourImages.Add(new UploadImage("wp1", "Nice mountain"));
/* ... */

在您的上传功能中,将最近上传的图片添加到yourImages

yourImages.Add(new UploadImage(Path.Combine(@"C:\Users\....\Resources\", Path.GetFileName(ImgDirectory.Text)), ImageName);

【讨论】:

  • 嘿@tinypomelo,我对此有点陌生,并尝试将其粘贴到我的代码中,但似乎我遇到了很多错误。你能不能把它全部写在一个代码块中,这样我可以更好地理解它!
  • 我应该这样做吗? imgur.com/a/CbQ1P23
  • imgur.com/a/QridRGf 你来了。 "ImageName" 是您要为图像命名的字符串(您可以创建一个文本框为其赋值,例如:ImageName = Textbox1.Text;)
  • 嘿@tinypomelo,我想通了!在下面查看我的解决方案!
【解决方案2】:

我的解决方案

嘿,我想通了!

我刚刚创建了一个包含图像的数组。 像这样:string[] images = Directory.GetFiles(@"C:\Users\....\Resources");

并添加了一个计数器:private int counter = 0;

在我的“下一张图片和上一张图片按钮”上,我只是这样做了:

private void Next_Click(object sender, EventArgs e)
    {
        counter++;
        if (images.Length == 0) return;

        if (counter > imgAmount + -1) counter = 0;
        var image = Image.FromFile(images[counter]);
        Images.Image = image;

        CurrentImg.Text = counter+1 + "/" + imgAmount.ToString();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多