工具条菜单项不显示

时间:2014-11-09 22:03:25

标签: c#

当我的窗体加载时,工具条菜单项栏就在那里,但是当我将鼠标悬停在它们上面或按下alt时,它内的项目才会显示。

此外,在我单击菜单中的更改颜色图标然后按Alt键之前,我的colordialog框才会打开。

我已经查看了这些属性,以确保没有隐藏属性或其他东西,但我似乎找不到任何东西。

我在下面发布了一些链接,向您展示正在发生的事情。

打开时:http://gyazo.com/c1f4fa4d27e3f54a65b1f8a3da6cd0da

当我按下alt或将鼠标悬停在菜单上时:http://gyazo.com/c86c5dfb723647c025f89a0c14da6766

不确定要放入什么代码。

更改颜色位:

private void changeColourToolStripMenuItem_Click(object sender, EventArgs e)
    {
        DialogResult result = colorDialog1.ShowDialog();
    }

我只是从工具箱中拖动了元素。

所有代码:

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 Assignment
{
public partial class Form1 : Form
{
    public Form1()
    {


        InitializeComponent();
        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 saveToolStripMenuItem_Click(object sender, EventArgs e)
    {

        dialog.InitialDirectory =System.Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        dialog.Title = "Save Image";
        dialog.FileName = "";
        dialog.Filter = "JPEG|*.jpg";
        dialog.ShowDialog();
    }

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



        Application.Exit();
    }


    private void changeColourToolStripMenuItem_Click(object sender, EventArgs e)
    {
        colorDialog1.ShowDialog();

    }

    private void menuToolStripMenuItem_Click(object sender, EventArgs e)
    {

    }


    private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {

    }

}
}

1 个答案:

答案 0 :(得分:0)

好的,所以经过几个小时的尝试来解决这个问题后,我找到了解决方案。随机无效就搞砸了。

非常感谢@Sjips的快速帮助。