c#新按钮类“无限循环错误”

时间:2017-01-26 08:36:54

标签: c# forms class button

我目前正在尝试在Visual Studio社区中创建一个名为GameButton的新类。即时尝试将所有代码放入其中,以便所有代码都是从按钮而不是表单生成的,但现在我移动了大部分代码,它要么不显示,要么进入无限循环,即时通讯目前还不确定如何修复它。如果我没有提供足够的信息,我会在需要时提供更多信息。

(Speelveld是表单中的一个表单,用于确定按钮的位置。“speelveld”是从visual studio中的内置工具箱导入的Panel。然后代码引用该表单来构建按钮。 )

表格c#

namespace WindowsFormsApplication9
{
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();            
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Marble();
    }
    public void Marble()
    {
        string line;
        System.IO.StreamReader file = new System.IO.StreamReader("Bitmap.txt");

                 int ButtonHeight = 40;
                 int y_row = 0;
        GameButton testButton = new GameButton();


            while ((line = file.ReadLine()) != null)
            {
                for (int x_row = 0; x_row < line.Count(); x_row++)
                {
                    if(line.Substring(x_row, 1) == "1")
                    {

                    Speelveld.BackColor = Color.White;
                    BackColor = Color.White;

                        testButton.Currentcolor = false;

                        if (x_row == 4 && y_row == 6)
                        {
                            testButton.BackColor = Color.White;
                        }


                        else
                        {
                            Speelveld.Controls.Add(testButton);
                        }                       
                }                  
            }
            y_row++;
        }
    }



}
}

GameButton c#

namespace WindowsFormsApplication9
{
public class GameButton: Button
{
    public int Row { get; set; }
    public int Column { get; set; }
    public bool Currentcolor { get; set; }
    Pen myPen;

    public int ButtonHeight = 40;
    public int y_row = 0;
    public int x_row = 0;


    public void Startup()
    {
        this.BackColor = Color.Red;
        this.Height = ButtonHeight;
        this.Width = ButtonHeight;
        this.Top = y_row * ButtonHeight + 20;
        this.Left = x_row * ButtonHeight + 20;
        this.Text = "X: " + x_row.ToString() + " Y: " + y_row.ToString();
        this.MouseUp += TmpButton_MouseUp;
    }
    protected override void OnPaint(PaintEventArgs pevent)
    {
        int radius = 20;
        pevent.Graphics.Clear(Color.White);
        Graphics graphics = pevent.Graphics;
        myPen = new Pen(new SolidBrush(this.BackColor), 2f);
        pevent.Graphics.FillEllipse(new SolidBrush(this.BackColor), 20 - radius, 20 - radius,
            radius + radius, radius + radius);
        myPen.Dispose();
    }

    private void TmpButton_MouseUp(object sender, MouseEventArgs e)
    {
        GameButton Mygamebutton = (GameButton)sender;
        Mygamebutton.Currentcolor = !Mygamebutton.Currentcolor;
        if (Mygamebutton.Currentcolor == true)
        {
            Mygamebutton.BackColor = Color.Black;
        }
        else
        {
            Mygamebutton.BackColor = Color.White;
        }
    }
}
}

BitMap.txt

  

011111110
       111111111个
       111111111个
       011111110
       001111100
       000111000
       000010000

1 个答案:

答案 0 :(得分:2)

你的男女同校有几个错误。您没有致电testButton.Startup()来设置自己的位置,GameButton课程也需要知道x_rowy_row值......

请参阅以下内容:

public void Marble()
{
    string line;
    System.IO.StreamReader file = new System.IO.StreamReader(@"C:\Users\Main\Desktop\Bitmap.txt");

    //var Speelveld = new Form3();
    //Speelveld.Show();

    int y_row = 0;


    while ((line = file.ReadLine()) != null)
    {
        for (int x_row = 0; x_row < line.Count(); x_row++)
        {
            if (line.Substring(x_row, 1) == "1")
            {

                Speelveld.BackColor = Color.White;
                BackColor = Color.White;

                GameButton testButton = new GameButton(); // ***
                testButton.Currentcolor = false;

                if (x_row == 4 && y_row == 6)
                {
                    testButton.BackColor = Color.White;
                }

                else
                {
                    Speelveld.Controls.Add(testButton);
                    testButton.Startup(x_row , y_row); //***
                }
            }
        }
        y_row++;
    }
}

并在GameButton启动中添加这些:

    public void Startup(int x, int y) //***
    {
        this.x_row = x; //***
        this.y_row = y; //***
        ...
    }