【问题标题】:How to have a List<string> with n amount of entries react to a button click如何让具有 n 个条目的 List<string> 对按钮单击做出反应
【发布时间】:2021-07-22 14:13:18
【问题描述】:

我有list,其中我有图像位置路径,我显示第一个bt 我有这个button,当它的clicked 我想移动到列表的下一个path。我怎样才能做到这一点?

首先是显示第一张图片的代码。

    protected void ShowPng(string pathPgnImg)
        {
            btnNextPage.Visible = true;
            string sImageName = "";
            
            string sImagePathImages = Server.MapPath("Anexos/");
            string pngFile = "";
            List<string> pngs = new List<string> { pngFile };
            string FileWithoutPath = Path.GetFileName(pathPgnImg);
            string fileWithoutPathAndExt = Path.GetFileNameWithoutExtension(FileWithoutPath);
            if(fileWithoutPathAndExt + "_pag" + LblHiddenImagePageNumber != fileWithoutPathAndExt + "_pag" + "" )
            {
                DirectoryInfo AnexoDirectory = new DirectoryInfo(PathForPdf);
                FileInfo[] filesInDir = AnexoDirectory.GetFiles(fileWithoutPathAndExt + "_pag" + "*.png");
                    
                
                    foreach (FileInfo foundFile in filesInDir)
                    {

                        pngFile = foundFile.FullName;
                        pngs.Add(pngFile);
                    }
                    pngFile = pngs[1];

            
                string sFileExt = Path.GetExtension(pngFile);

                pngFile = Path.GetFileNameWithoutExtension(pngFile);
                m_sImageNameUserUpload = pngFile + sFileExt;
                m_sImageNameGenerated = Path.Combine(sImagePathImages, 
                m_sImageNameUserUpload);

                //Literal1.Text += "<img src=" + '"' + pngFile + '"' + "/>";
                imgCrop.ImageUrl = "Anexos\\" + Path.GetFileName(pngFile);

                if (m_sImageNameUserUpload != "")
                {
                    pnlCrop.Visible = true;
                    imgCrop.ImageUrl = "Anexos/" + m_sImageNameUserUpload;
                    Session["ImageName"] = m_sImageNameUserUpload;
                }
            }
}

在 foreach 循环中,我将所有路径添加到 List

我想在这个按钮点击事件中实现这一点。

protected void btnNextPage_Click(object sender, EventArgs e)
        {
                     
            ShowPng(imgCrop.ImageUrl);
            
        } 

但是,如果有办法在 ShowPng function 内执行此操作,我就可以了。

【问题讨论】:

    标签: c# asp.net list


    【解决方案1】:

    您需要某种状态变量来保存当前图像的索引,然后当您单击按钮时可以更新该状态。

    我认为您的 ShowPng 代码不应该执行所有的逻辑。

    您应该在一个方法中找到在路径中找到的所有图像,并与另一个方法一起显示它们,这应该存储在某个类级别的属性或状态对象中。

    private List<string> imagePaths = new List<string>();
    private int imageIndex = 0;
    

    在您包含的方法中,当您找到匹配的图像时,将一个项目添加到 imagePaths 列表中。 然后,当您单击下一个按钮时,您将执行以下操作 -

    imageIndex++ //increase index by 1
    imageCrop.ImageUrl = imagePaths[imageIndex]
    

    【讨论】:

    • 你好克里斯谢谢你的回复我试过你所说的它给了我这个错误 System.ArgumentOutOfRangeException: 索引超出范围。它必须是非负的并且小于集合大小。参数名称:index' on this button event line imageCrop.ImageUrl = imagePaths[imageIndex]
    • 你需要检查 imagePaths 。如果还没有这些路径,请获取它们。如果有这些路径,则移动到下一个索引,并假设没有到达索引的末尾。
    • 哦,好的,谢谢,现在可以了,谢谢你们俩。
    猜你喜欢
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2022-06-29
    相关资源
    最近更新 更多