C# button problem

sharK223

Mitglied
Hallo leute,

ich melde mich mal wieder weil ich ein problem habe das ich nicht selber lösen kann und es im Internet nicht finde.
Ich soll für die Schule ein MineSweeper Spiel programiren. Das ist ja auch kein probelm aber irgentwie werden die Buttons nicht angezeigt...

Hier der Code zum anzeigen:
Code:
            Button btn_temp = new Button();
            
            btn_temp.Width = 15;
            btn_temp.Height = 15;
            btn_temp.Left = 15 * zeile;
            btn_temp.Top = 50 * reihe;
            btn_temp.Show();
            btn_temp.Name = "btn_" + name;
An der positionirung arbeite ich später weiter. Jedenfals müsste min. 1 Button angezeigt werden oder? Das ganze wird mit einer Schleife aus einer anderen Klasse ausgeführt.

Hier der ganze Code:
Form1.cs
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace MineSweeper
{
    public partial class Form1 : Form
    {
        int m_neue_zeilen = 20;
        int m_neue_reihen = 16;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void btn_Newgame_Click(object sender, EventArgs e)
        {
            CMinesweeper CM = new CMinesweeper();
            CM.new_game(m_neue_zeilen, m_neue_reihen);
        }

        private void übernehToolStripMenuItem_Click(object sender, EventArgs e)
        {
            m_neue_zeilen = int_converter(tb_zeilen.Text);
        }

        int int_converter(string tb)
        {
            try
            {
                return Convert.ToInt16(tb);
            }

            catch 
            {
                return 0;
                MessageBox.Show(tb + "ist kein gültiger Wert.\nBitte einen ganzen Zahlenwert eingeben.\nZ.B. \"20\"");
            }
        }

        private void übernehmenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            m_neue_reihen = int_converter(tb_reihen.Text);
        }

        public void buttons(string name, int zeile, int reihe)
        {
            Button btn_temp = new Button();
            
            btn_temp.Width = 15;
            btn_temp.Height = 15;
            btn_temp.Left = 15 * zeile;
            btn_temp.Top = 50 + reihe;
            btn_temp.Show();
            btn_temp.Name = "btn_" + name;
        }

        private void neuesSpielToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CMinesweeper CM = new CMinesweeper();
            CM.new_game(m_neue_zeilen, m_neue_reihen);
        }

        private void beToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        public void pleasewait()
        {
            if (!lbl_plswait.Visible)
            {
                lbl_plswait.Visible = true;
            }
            else
            {
                lbl_plswait.Visible = false;
            }
        }
    }
}

CMineSweeper
Code:
using System;
using System.Collections.Generic;
using System.Text;

namespace MineSweeper
{
    class CMinesweeper
    {
        bool Mine;
        bool Fahne;
        bool Fragezeichen;
        bool linksklick;
        int Zeilen;
        int Reihen;
        Form1 frm1 = new Form1();
        

        public void new_game (int neue_zeilen, int neue_reihen)
        {
            frm1.pleasewait();
            if(neue_zeilen != Zeilen)
            {
                Zeilen = neue_zeilen;
            }

            if (neue_reihen != Reihen)
            {
                Reihen = neue_reihen;
            }

            for(int z = 0; z < Zeilen; z++)
            {
                for (int y = 0; y < Reihen; y++)
                {
                    string name = Convert.ToString(y + z + Zeilen);
                    frm1.buttons(name, z, y);

                }
            }
            frm1.pleasewait();
        }
    }
}

Danke schonmal...
 
Versuch mal zu überprüfen ob der Button überhaupt korrekt erstellt wird bzw diese funktion aufgerufen wird -> Breakpoint

Wenn er erstellt wird kannst du mal nachsehen wie seine reellen Positionswerte sind.

Arbeitst du mit WPF oder Forms?

Gruß

Avorin
 
Hallo,

ich bins ich konnte leider nicht früher antworten, wir haben im moment probleme mit unserem Provider... ich bin jetzt mit nem UMTS-Stick drin.

Also, das mit dem Controls.Add(btn_temp) hab ich auch schon rausgefunden aber es werden immer noch keine Buttons gezeigt. Ich habe exakt den gleichen Quellcode in einem neuen Project auf gemacht es tut sich aber dennoch nichts.
Wenn ich aber hingehe und der Funktion zum Button erstellen mit einer anderen funktion die Werte
z, name und r manuel übergebe, also ohne die Schleife. Wird ein Button erstellt...

Ich bin ratlos...

Ach ja und ich arbeite mit Visual C# 2005 und arbeite mit Form´s. Ich weis nichtmal was das andere ist...

Mit Freundlichen Grüßen
Ich xD
 
Hallo,

ich habe noch mal in deinen Code hineingeschaut. Du erzeugst in der Klasse "CMinesweeper" mit "Form1 frm1 = new Form1(); " eine neue Instanz deiner Form.
Das ist aber wahrscheinlich nicht die Form, die angezeigt wird und damit siehst du natürlich auch keine Buttons.. Du müsstest der Klasse eine Referenz auf die Form übergeben und darüber die buttons-Methode aufrufen.

Gruß
MCoder
 
Zurück