我在尝试打开/显示新表单时有时会得到ArgumentException参数无效?

时间:2014-05-10 11:46:00

标签: c# winforms

我有Form1pictureBox1和双击事件:

private void pictureBox1_DoubleClick_1(object sender, EventArgs e)
{
    pb1_fs = new Picturebox1_Fullscreen();
    pictureBox1.Enabled = true;
    g = last_image_file();
    nf = sf + @"\radar" + g.ToString("D6") + ".gif";
    lf = nf;
    pb1_fs.WindowState = FormWindowState.Maximized;
    pb1_fs.Show();
    pb1_fs.picturebox1(pictureBox1);
    pb1_fs.FormClosing += new FormClosingEventHandler(pb1_fs_FormClosing);
}

这应该打开/显示新表单pb1_fs

我之前没有像现在这样的问题。

问题是,一旦我双击pictureBox1,有时会发生,有时候我没有

  

ArgumentException参数无效。

我不确定问题出在哪里,因为它停在的行并抛出异常在Program.cs上:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;

namespace mws
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            if (IsApplicationAlreadyRunning() == true)
            {
                MessageBox.Show("The application is already running");
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }

        static bool IsApplicationAlreadyRunning()
        {
            string proc = Process.GetCurrentProcess().ProcessName;
            Process[] processes = Process.GetProcessesByName(proc);

            if (processes.Length > 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

停止并在}

上显示例外

这是第二次}结束。

      Application.Run(new Form1());
   }
}

异常完整消息是:

  

System.ArgumentException未处理
  的HResult = -2147024809
  消息=参数无效   来源= System.Drawing中
  堆栈跟踪:
  在System.Drawing.Image.get_RawFormat()
  在System.Drawing.Graphics.DrawImage(图像,Int32 x,Int32 y,Int32宽度,Int32高度)
  在System.Drawing.Graphics.DrawImage(图像,矩形矩形)
  在System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe)
  在System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e,Int16 layer)
  在System.Windows.Forms.Control.WmPaint(Message&amp; m)
  在System.Windows.Forms.Control.WndProc(Message&amp; m)
  在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息&amp; m)
  在System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息&amp; m)
  在System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)

问题是导致异常的原因以及在form1上双击事件的内部?或者可能是新形式的pb1_fs构造函数?如何查看问题所在?

我可以在这里添加pb1_fs表单的构造函数代码,但它很长。

编辑:

这是新表格中的方法picturebox1。 在Form1中的行:

pb1_fs.picturebox1(pictureBox1);

将pictureBox1从Form1传递到新表单,因此在新表单中我可以使用并显示form1 pictureBox1中的当前图像。

public PictureBox picturebox1(PictureBox pb1)
{
    pictureBox1.Image = pb1.Image;
    return pictureBox1;
}

2 个答案:

答案 0 :(得分:0)

我不知道错误是什么,但会尝试移动此行

pb1_fs.Show();
所有其他初始化代码后

答案 1 :(得分:0)

我认为问题在于:

public PictureBox picturebox1(PictureBox pb1)
{
  pictureBox1.Image = pb1.Image;
  return pictureBox1;
}

我认为您需要克隆该图像,因此您不会在2个不同的UI元素中使用该图像的一个实例。将代码替换为:

public PictureBox picturebox1(PictureBox pb1)
{
  pictureBox1.Image = pb1.Image.Clone();
  return pictureBox1;
}

我还会在

下移动 Show()方法
pb1_fs.FormClosing += new FormClosingEventHandler(pb1_fs_FormClosing);

这一行