WindowsFormsApplication1.Form1.Dispose(bool)':找不到合适的方法来覆盖

问题描述 投票:0回答:3

对于一项作业,我必须将分形渲染程序从 Java 转换为 C#,我想我已经完成了它,但是当我尝试运行它时,我收到标题中出现的错误,我不知道为什么会这样正在发生。这是渲染器本身的代码,它没有给我带来任何错误:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Form1
{
public partial class Form1 : Form
{
    public Form1()
    {


        init();
        start();
        this.DoubleBuffered = true;


    }
    //code to convert HSB to RGB from HSB.cs. All your code so i made it take up less space. 
    public struct HSBColor
    {
        float h;
        float s;
        float b;
        int a;
        public HSBColor(float h, float s, float b) { this.a = 0xff; this.h = Math.Min(Math.Max(h, 0), 255); this.s = Math.Min(Math.Max(s, 0), 255); this.b = Math.Min(Math.Max(b, 0), 255); }
        public HSBColor(int a, float h, float s, float b) { this.a = a; this.h = Math.Min(Math.Max(h, 0), 255); this.s = Math.Min(Math.Max(s, 0), 255); this.b = Math.Min(Math.Max(b, 0), 255); }
        public float H { get { return h; } }
        public float S { get { return s; } }
        public float B { get { return b; } }
        public int A { get { return a; } }
        public Color Color { get { return FromHSB(this); } }
        public static Color FromHSB(HSBColor hsbColor)
        {
            float r = hsbColor.b;
            float g = hsbColor.b;
            float b = hsbColor.b;
            if (hsbColor.s != 0)
            {
                float max = hsbColor.b; float dif = hsbColor.b * hsbColor.s / 255f; float min = hsbColor.b - dif; float h = hsbColor.h * 360f / 255f;
                if (h < 60f) { r = max; g = h * dif / 60f + min; b = min; }
                else if (h < 120f) { r = -(h - 120f) * dif / 60f + min; g = max; b = min; }
                else if (h < 180f) { r = min; g = max; b = (h - 120f) * dif / 60f + min; }
                else if (h < 240f) { r = min; g = -(h - 240f) * dif / 60f + min; b = max; }
                else if (h < 300f) { r = (h - 240f) * dif / 60f + min; g = min; b = max; }
                else if (h <= 360f) { r = max; g = min; b = -(h - 360f) * dif / 60 + min; }
                else { r = 0; g = 0; b = 0; }
            }
            return Color.FromArgb(hsbColor.a, (int)Math.Round(Math.Min(Math.Max(r, 0), 255)), (int)Math.Round(Math.Min(Math.Max(g, 0), 255)), (int)Math.Round(Math.Min(Math.Max(b, 0), 255)));
        }
    }
    private const int MAX = 256;      // max iterations
    private const double SX = -2.025; // start value real
    private const double SY = -1.125; // start value imaginary
    private const double EX = 0.6;    // end value real
    private const double EY = 1.125;  // end value imaginary
    private static int x1, y1, xs, ys, xe, ye;
    private static double xstart, ystart, xende, yende, xzoom, yzoom;
    private static float xy;
    private int c = 0;
    //private Image picture; Taken out, not needed
    // create rectangle variable JGB
    Rectangle rec;
    private Graphics g1;
    //private Cursor c1, c2; Taken out, not needed
    private System.Drawing.Bitmap bitmap;
    public void init()
    {
        //setSize(640, 480); changed this code to JGB:
        this.Size = new Size(640, 480);
        // Taken all lines out below. Not needed.
        /*finished = false; 
        addMouseListener(this);
        addMouseMotionListener(this);
        c1 = new Cursor(Cursor.WAIT_CURSOR);
        c2 = new Cursor(Cursor.CROSSHAIR_CURSOR); */
        x1 = 640;
        y1 = 480;
        xy = (float)x1 / (float)y1;
        //picture = createImage(x1, y1); Taken out and replaced with JGB:
        bitmap = new Bitmap(x1, y1);
        //g1 = picture.getGraphics(); changed to get my bitmap 
        g1 = Graphics.FromImage(bitmap);
        //finished = true; Finished variable deleted so not needed
    }
    //Code below didnt appear to do anything so i deleted it
    /*public void destroy() // delete all instances 
    {
        if (finished)
        {
            removeMouseListener(this);
            removeMouseMotionListener(this);
            picture = null;
            g1 = null;
            c1 = null;
            c2 = null;
            System.gc(); // garbage collection
        }
    } */

    public void start()
    {
        //action = false;
        //rectangle = false;


        initvalues();

        // added dialog box for instance loading and save varaibles needed for position and zoom to text file
        DialogResult dialog = MessageBox.Show("Would You Like to Load Your Last Instance?", "Load Instance?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
        if (dialog == DialogResult.Yes)
        {

            string[] lines = System.IO.File.ReadAllLines(@"C:\Users\Public\Writelines.txt");
            xzoom = System.Convert.ToDouble(lines[0]);
            yzoom = System.Convert.ToDouble(lines[1]);
            xstart = System.Convert.ToDouble(lines[2]);
            ystart = System.Convert.ToDouble(lines[3]);
        }
        else
        {
            xzoom = (xende - xstart) / (double)x1;
            yzoom = (yende - ystart) / (double)y1;
        }

        mandelbrot();
    }
    public void stop()
    {
    }
    /*public void paint(Graphics g, PaintEventArgs e)
    {
        update(g);
    }
   public void update(Graphics g)
    {
        //g.DrawImage(picture, 0, 0);

    }*/
    private void mandelbrot()
    {
        int x, y;
        float h, b, alt = 0.0f;
        Color color;


        Pen pen = new Pen(Color.Black);
        for (x = 0; x < x1; x += 2)
            for (y = 0; y < y1; y++)
            {
                h = pointcolour(xstart + xzoom * (double)x, ystart + yzoom * (double)y, c);
                if (h != alt)
                {


                    b = 1.0f - h * h;

                    color = HSBColor.FromHSB(new HSBColor(h * 255, 0.8f * 255, b * 255));
                    pen = new Pen(color);
                    alt = h;

                }
                g1.DrawLine(pen, x, y, x + 1, y);
            }


    }

    private float pointcolour(double xwert, double ywert, int j)
    {
        double r = 0.0, i = 0.0, m = 0.0;

        // int j = 0;

        while ((j < MAX) && (m < 4.0))
        {
            j++;
            m = r * r - i * i;
            i = 2.0 * r * i + ywert;
            r = m + xwert;
        }
        return (float)j / (float)MAX;
    }
    private void initvalues()
    {
        xstart = SX;
        ystart = SY;
        xende = EX;
        yende = EY;
        if ((float)((xende - xstart) / (yende - ystart)) != xy)
            xstart = xende - (yende - ystart) * (double)xy;
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Graphics g1 = e.Graphics;
        g1.DrawImage(bitmap, 0, 0, x1, y1);
        using (Pen pen = new Pen(Color.White, 2))
        {
            e.Graphics.DrawRectangle(pen, rec);
        }
        Invalidate();


    }
    //added load method

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            xe = e.X;
            ye = e.Y;
            if (xs < xe)
            {
                if (ys < ye) rec = new Rectangle(xs, ys, (xe - xs), (ye - ys));
                else rec = new Rectangle(xs, ye, (xe - xs), (ys - ye));
            }
            else
            {
                if (ys < ye) rec = new Rectangle(xe, ys, (xs - xe), (ye - ys));
                else rec = new Rectangle(xe, ye, (xs - xe), (ys - ye));
            }


            this.Invalidate();
        }



    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {

        if (e.Button == MouseButtons.Left)
        {
            // e.consume();  
            xs = e.X;
            ys = e.Y; // starting point y
            this.Invalidate();
        }

    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {


        rec = new Rectangle(0, 0, 0, 0);
        if (e.Button == MouseButtons.Left)
        {
            int z, w;
            //e.consume();

            //xe = e.X;
            //ye = e.Y;
            if (xs > xe)
            {
                z = xs;
                xs = xe;
                xe = z;
            }
            if (ys > ye)
            {
                z = ys;
                ys = ye;
                ye = z;
            }
            w = (xe - xs);
            z = (ye - ys);
            if ((w < 2) && (z < 2)) initvalues();
            else
            {
                if (((float)w > (float)z * xy)) ye = (int)((float)ys + (float)w / xy);
                else xe = (int)((float)xs + (float)z * xy);
                xende = xstart + xzoom * (double)xe;
                yende = ystart + yzoom * (double)ye;
                xstart += xzoom * (double)xs;
                ystart += yzoom * (double)ys;
            }
            xzoom = (xende - xstart) / (double)x1;
            yzoom = (yende - ystart) / (double)y1;

            mandelbrot();

            string stringxzoom = xzoom.ToString();
            string stringyzoom = yzoom.ToString();
            string stringystart = ystart.ToString();
            string stringxstart = xstart.ToString();
            string[] lines = { stringxzoom, stringyzoom, stringxstart, stringystart };

            System.IO.File.WriteAllLines(@"C:\Users\Public\Writelines.txt", lines);
            this.Invalidate();
            //Repaint();

        }

    }


    private void restartToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Application.Restart();
    }
    private void exitToolStripMenuItem1_Click(object sender, EventArgs e)
    {



        Application.Exit();
    }




    private void menuToolStripMenuItem_Click(object sender, EventArgs e)
    {

    }


    private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {

    }




}
}

这是用于自动生成的表单设计器的代码,我不确定为什么会出现错误,因为我以前从未遇到过错误:

namespace WindowsFormsApplication1
{
partial class Form1
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Windows Form Designer generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.components = new System.ComponentModel.Container();
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.Text = "Form1";
    }

    #endregion
}
}
c# forms fractals
3个回答
8
投票

我相信这是因为你们的命名空间不一样造成的。 由于设计器生成的部分代码不是从 Form 继承的,因此您没有可以重写的方法。 一旦你通过匹配命名空间将两个类正确地结合在一起,它就应该可以工作。

要修复此问题,您可以更改设计器代码的命名空间以匹配 Form1 的命名空间:

namespace Form1
{
    partial class Form1
    {
        //...
    }
}

或者更改您的表单以匹配设计师:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        //....
    }
}

0
投票

编辑项目属性并更新默认命名空间以匹配所有表单所需的命名空间


0
投票

我有类似的问题,来这里寻找答案。 对我来说,命名空间匹配并且在 Visual Studio 中编译得很好,但在 Jenkins 构建代理上通过 MS Build 构建时失败了。

我的问题是主 Form1.cs 看起来像这样

namespace MyNameSpace;
public partial class Form1
{
    (code goes here)

    protected overrides void Dispose() 
    {
       (code goes here)
    }
}

Form1.Designer.cs 看起来像这样

namespace MyNameSpace;
public partial class Form1 : Form
{   // and so on...

关键是将

: Form
从designer.cs移动到主cs。

我不知道为什么这会产生影响。 以前在设计器文件中继承它一直对我有用,但我已经很长一段时间没有做过任何新的 Windows 窗体程序了,而且它们之前总是在 VB 中。

© www.soinside.com 2019 - 2024. All rights reserved.