2015-11-07 8 views
1

Для назначения мне пришлось преобразовать фрактальную программу рендеринга из Java в C#, и я думаю, что я это сделал, но когда я пытаюсь запустить я получаю ошибку, которая присутствует в названии, и я понятия не имею, почему это происходит. Это код для самого визуализатора, который представляет меня без ошибок:WindowsFormsApplication1.Form1.Dispose (bool) ': не найдено подходящего метода для переопределения

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

ответ

2

Я считаю, что это вызвано тем, что ваши пространства имен не совпадают. Поскольку неполный код, сгенерированный конструктором, не наследуется от формы, у вас нет метода для переопределения. После того, как вы соберете два класса правильно, сопоставив пространства имен, он должен работать.

Чтобы исправить это, вы можете либо изменить пространство имен кода конструктора, чтобы соответствовать вашему пространству имен Form1:

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

Или изменить форму, чтобы соответствовать дизайнер:

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

Я хотел бы избежать используя тот же идентификатор для пространства имен и класса: это просто запутывает читателя, а иногда и компилятор (может случиться, что он не может скомпилировать, поскольку он разрешает Form1 как пространство имен, а не как имя класса) –

Смежные вопросы