Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从一个表单到另一个表单的标签中未显示选定的文件名C_C#_Thumbnails - Fatal编程技术网

C# 从一个表单到另一个表单的标签中未显示选定的文件名C

C# 从一个表单到另一个表单的标签中未显示选定的文件名C,c#,thumbnails,C#,Thumbnails,我正在修改一个将成为实用程序的应用程序。到目前为止,该应用程序设计为从任何文件夹加载图片并以缩略图显示,然后用户应该能够选择要保存在数据库中的图片。缩略图由一个ImageViewer表单组成,该表单将加载每个图像。因此,在ImageViewer表单中有一个文本框和一个复选框。当加载多张图片时,它们中的每一张都将动态生成,请参见下图。问题是,当单击复选框时,它应该在标签中显示文件的图片缩略图文本框上方列出的名称,它可以是标签或文本框。当用户点击复选框时,会看到一条消息:“Added anyImag

我正在修改一个将成为实用程序的应用程序。到目前为止,该应用程序设计为从任何文件夹加载图片并以缩略图显示,然后用户应该能够选择要保存在数据库中的图片。缩略图由一个ImageViewer表单组成,该表单将加载每个图像。因此,在ImageViewer表单中有一个文本框和一个复选框。当加载多张图片时,它们中的每一张都将动态生成,请参见下图。问题是,当单击复选框时,它应该在标签中显示文件的图片缩略图文本框上方列出的名称,它可以是标签或文本框。当用户点击复选框时,会看到一条消息:“Added anyImage.jpg”,或者当取消选中复选框时,会显示“Removed anyImage.jpg”。它不显示标签中的文本。我有以下代码

此代码用于加载主窗体:

其他代码来自ImageViewer表单复选框:

这是在类中声明的变量,该类将所选文件名发送到主窗体:public static string sendSelectedFile

ImageViewer代码:


下面是ImageViewer表单在复选框更改时引发自定义事件的快速示例:

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

    public delegate void dlgImageChecked(ImageViewer sender, string message);
    public event dlgImageChecked ImageChecked;

    private void cboxToSave_CheckedChanged(object sender, EventArgs e)
    {
        if (ImageChecked != null)
        {
            ImageChecked(this, (cboxToSave.Checked ? "Added: " : "Removed: ") + txFileName.Text);
        }
    }
}
现在,当您创建ImageViewer实例时,需要连接该事件…类似于:

// ... in your MainForm class ...

private void button1_Click(object sender, EventArgs e)
{
    // when you create your instances of ImageViewer, wire up their ImageChecked() event:
    ImageViewer iv = new ImageViewer();
    iv.ImageChecked += Iv_ImageChecked;

}

private void Iv_ImageChecked(ImageViewer sender, string message)
{
    ImageViewer iv = (ImageViewer)sender; // if you need to reference it for other reasons ...

    stripSelectedFile.Text = message;
    txInformation.Text = message;
}

您的原始帖子没有显示ImageViewer实例的创建,因此您需要以某种方式将上述内容合并到代码中。

不要通过静态字符串进行通信,而是让ImageViewer表单引发主表单订阅的自定义事件。您能举个例子吗?我想我以前试过类似的方法。谢谢你的帮助。我添加了ImageViewer的完整代码,以便您可以看到它。我仍然不理解private void button1\u click按钮1的功能。按钮1的代码只是显示,当您创建ImageViewer实例时,您需要连接我添加到其中的事件。您的代码没有显示ImageViewer是如何创建的,所以我不得不将该代码放在某个地方。我可以按照您给出的示例进行操作,但是使用了一个设置为间隔100的计时器,现在可以工作了。非常感谢你!计时器几乎肯定是错误的方法……但没关系@别介意,我试过上面你提供的代码。我仍然好奇如何使它以那种方式工作,但仍然无法得到它。它使用计时器工作,但我找不到一种方法,当您选中/取消选中复选框时,它可以更新标签。
public partial class ImageViewer : UserControl
    {
        private Image m_Image;
        private string m_ImageLocation;

        private bool m_IsThumbnail;
        private bool m_IsActive;

        public static string sendSelectedFile;
        public ImageViewer()
        {
            m_IsThumbnail = false;
            m_IsActive = false;

            InitializeComponent();


        }

        public Image Image
        {
            set
            {
                m_Image = value;
            }
            get
            {
                return m_Image;
            }
        }

        public string ImageLocation
        {
            set
            {
                m_ImageLocation = value;
            }
            get
            {
                return m_ImageLocation;
            }
        }

        public bool IsActive
        {
            set
            {
                m_IsActive = value;
                this.Invalidate();
            }
            get
            {
                return m_IsActive;
            }
        }

        public bool IsThumbnail
        {
            set
            {
                m_IsThumbnail = value;
            }
            get
            {
                return m_IsThumbnail;
            }
        }
        public void ImageSizeChanged(object sender, ThumbnailImageEventArgs e)
        {
            this.Width = e.Size;
            this.Height = e.Size;
            this.Invalidate();
        }

        public void LoadImage(string imageFilename, int width, int height)
        {
            Image tempImage = Image.FromFile(imageFilename);
            m_ImageLocation = imageFilename;

            //gets the name of the file from the location
            txFileName.Text = Path.GetFileNameWithoutExtension(imageFilename);

            int dw = tempImage.Width;
            int dh = tempImage.Height;
            int tw = width;
            int th = height;
            double zw = (tw / (double)dw);
            double zh = (th / (double)dh);
            double z = (zw <= zh) ? zw : zh;
            dw = (int)(dw * z);
            dh = (int)(dh * z);

            m_Image = new Bitmap(dw, dh);

            Graphics g = Graphics.FromImage(m_Image);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.DrawImage(tempImage, 0, 0, dw, dh);
            g.Dispose();

            tempImage.Dispose();
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            if (g == null) return;
            if (m_Image == null) return;

            int dw = m_Image.Width;
            int dh = m_Image.Height;
            int tw = this.Width - 8; // remove border, 4*4 
            int th = this.Height - 8; // remove border, 4*4 
            double zw = (tw / (double)dw);
            double zh = (th / (double)dh);
            double z = (zw <= zh) ? zw : zh;

            dw = (int)(dw * z);
            dh = (int)(dh * z);
            int dl = 4 + (tw - dw) / 2; // add border 2*2
            int dt = 4 + (th - dh) / 2; // add border 2*2

            g.DrawRectangle(new Pen(Color.Yellow), dl, dt, dw, dh);

            if (m_IsThumbnail)
                for (int j = 0; j < 3; j++)
                {
                    //draws and color the horizontal line in the miniature
                    g.DrawLine(new Pen(Color.LightSalmon),
                        new Point(dl + 3, dt + dh + 1 + j),
                        new Point(dl + dw + 3, dt + dh + 1 + j));
                    //draws and color the vertical right line in the miniature
                    g.DrawLine(new Pen(Color.LightGreen),
                        new Point(dl + dw + 1 + j, dt + 3),
                        new Point(dl + dw + 1 + j, dt + dh + 3));
                }

            g.DrawImage(m_Image, dl, dt, dw, dh);

            if (m_IsActive)
            {
                //draws the rectangle inside and gives it color
                g.DrawRectangle(new Pen(Color.MediumTurquoise, 1), dl, dt, dw, dh);
                //draws the rectangle outside and gives it color
                g.DrawRectangle(new Pen(Color.RosyBrown, 2), dl - 2, dt - 2, dw + 4, dh + 4);

            }
        }

        private void OnResize(object sender, EventArgs e)
        {
            this.Invalidate();
        }

        public void cboxToSave_CheckedChanged(object sender, EventArgs e)
        {

            if (cboxToSave.Checked == true)
            {
                sendSelectedFile = "Added: " + txFileName.Text;    

            }
            else
            {
                {
                    sendSelectedFile = "Removed: " + txFileName.Text;
                }
            }
        }
    }
delegate void DelegateAddImage(string imageFilename);
        private DelegateAddImage m_AddImageDelegate;
        private void AddImage(string imageFilename)
        {
            try
            {
                // thread safe
                if (this.InvokeRequired)
                {
                    this.Invoke(m_AddImageDelegate, imageFilename);
                }
                else
                {
                    int size = ImageSize;
                    lbNumberOfFiles.Visible = true;
                    lbHowMany.Visible = true;

                    ImageViewer imageViewer = new ImageViewer();

                    imageViewer.Dock = DockStyle.Bottom;
                    imageViewer.LoadImage(imageFilename, 256, 256);
                    imageViewer.Width = size;
                    imageViewer.Height = size;
                    imageViewer.IsThumbnail = true;

                    imageViewer.MouseClick += new MouseEventHandler(imageViewer_MouseClick);

                    txInformation.Text = imageFilename;
                    SetProgressBar();
                    counter++;
                    lbHowMany.Text = "Images";
                    lbNumberOfFiles.Text = counter.ToString();

                    this.OnImageSizeChanged += new ThumbnailImageEventHandler(imageViewer.ImageSizeChanged);
                    //passes the pictures to the main picture container 
                    this.flowLayoutPanelMain.Controls.Add(imageViewer);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("An error has ocurred. Error: " + e, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

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

    public delegate void dlgImageChecked(ImageViewer sender, string message);
    public event dlgImageChecked ImageChecked;

    private void cboxToSave_CheckedChanged(object sender, EventArgs e)
    {
        if (ImageChecked != null)
        {
            ImageChecked(this, (cboxToSave.Checked ? "Added: " : "Removed: ") + txFileName.Text);
        }
    }
}
// ... in your MainForm class ...

private void button1_Click(object sender, EventArgs e)
{
    // when you create your instances of ImageViewer, wire up their ImageChecked() event:
    ImageViewer iv = new ImageViewer();
    iv.ImageChecked += Iv_ImageChecked;

}

private void Iv_ImageChecked(ImageViewer sender, string message)
{
    ImageViewer iv = (ImageViewer)sender; // if you need to reference it for other reasons ...

    stripSelectedFile.Text = message;
    txInformation.Text = message;
}