C# - DisplayDialog()无法处理FileSave和拖放

时间:2017-08-28 11:15:59

标签: c# winforms crash save

我使用一些屏幕截图代码成功构建,并且拖放工作(但没有代码),我正在尝试在文件后显示在表单上保存成功,或者拖放太多文件。我不想使用MessageBox.Show(即使我替换代码也可以使用此方法),因为我想使用复选标记图片和按钮来打开屏幕截图位置的文件。我的问题是截图保存后,from#.designer.cs中的一行崩溃了。我一直在寻找如何解决这个问题,没有任何帮助。我不打算触摸Form3.Designer.cs文件,因为评论说没有。我的代码列在下面。

表单1中的屏幕截图/屏幕截图代码:

        private void saveScreenshotToolStripMenuItem_Click(object sender, EventArgs e)
    {
        // ** SAVE A SCREENSHOT *** (Working)
        Bitmap bitmap = new Bitmap(this.Width, this.Height);
        DrawToBitmap(bitmap, new Rectangle(0, 0, bitmap.Width, bitmap.Height));
        bitmap.Save((boxFileName.Text) + "_ScreenCap.JPEG",ImageFormat.Jpeg);

       // If i replace the following 2 lines with MessageBox.Show("FileSave successful"); it works fine. Why is this code not working????

        Form3 f3 = new Form3();
        f3.ShowDialog();

    }

Form3.Designer.CS

中崩溃的代码
        // Form3
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(292, 121);
        this.Controls.Add(this.button1);
        this.Controls.Add(this.label2);
        this.Controls.Add(this.label1);
        this.Controls.Add(this.pictureBox1);
        this.MaximizeBox = false;
        this.MaximumSize = new System.Drawing.Size(300, 150);
        this.MinimizeBox = false;
        this.MinimumSize = new System.Drawing.Size(300, 150);
        this.Name = "Form3";
        this.ShowIcon = false;
        this.ShowInTaskbar = false;
        this.Text = "ScreenCap Result";
        this.Load += new System.EventHandler(this.Form3_Load);

        /// the following line crashed

        ((System.ComponentModel.ISupportInitialize)(this.performanceCounter1)).EndInit();

        // end line that crashed

        ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
        this.ResumeLayout(false);
        this.PerformLayout();

以下是DragDrop的代码:

void Form1_DragDrop(object sender, DragEventArgs e)
    {
        var files = (string[])e.Data.GetData(DataFormats.FileDrop);
        if (files.Length == 1)
        {
            /// WORKING

            MessageBox.Show("Reading files from Drag and Drop not fully implimentd.");
        }
        else
        {
            // NOT WORING (crashes)

            Form3 f3 = new Form3();
            f3.ShowDialog();
        }

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您链接到的屏幕截图上的错误消息说

  

出现InvalidOperationException

     

其他信息:由于缺少CategoryName而无法初始化。

Part of the screenshot provided by OP

似乎微软忘记在EndInit()电话上记录该异常,但这不是第一个。

因此,在performanceCounter1上,我假设其类型为PerformanceCounter,您需要为属性CategoryName提供一个值。

您可以在不手动修改Form3.Designer.cs文件的情况下执行此操作。而是在设计器中打开Form3,选择performanceCounter1并从列表中选择一个值,如以下屏幕截图所示:

Select a value from the list of performance counters

答案 1 :(得分:0)

我弄清楚是什么导致了这个问题。我不得不从嵌入对象窗口中删除perfomanceCounter1对象,并且应用程序崩溃的问题消失了。我必须更加小心我为嵌入对象添加的内容。