Search code examples
c#formsfractals

WindowsFormsApplication1.Form1.Dispose(bool)':no suitable method found to override


For an assignment I've had to convert a fractal rendering program from Java to C# and I think I've done it but when i try to run it I get the error that is present in the title and I have no idea why it is happening. This is the code for the renderer itself which presents me with no errors:

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)
    {

    }




}
}

and this is the code that is used for the form designer which was auto generated and I'm not sure why an error is being presented because I've never had one before:

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
}
}

Solution

  • I believe it is caused because your namespaces are not the same. Since the partial code generated by the designer doesn't inherit from Form, you don't have a method to override. Once you make the two classes tie together properly by matching the namespaces, it should work.

    To fix it, you can either change the namespace of the designer code to match your namespace of Form1:

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

    Or change your form to match the designer:

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