C# Button, Array, Gruppe, Dynamisch erzeugen

Okay,
bis hier ist alles zu meiner zufriedenheit gelaufen.

jetzt will ich einem Butten gerne eine eigenschaft zuweisen. wie mach ich das denn?

zur zeit sieht mein programm so aus


PHP:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MyMineSweeper
{
    public partial class Form1 : Form
    {

        #region Declarationen
        Button[] Buttons;
        private const int _Groesse = 25;
        private int _PosX;
        private int _PosY = 30;
        private int _ButtonNummer;
        string[] _Name;
        int _FeldGroesse;
        private bool _Vermient = true;
        int zufallszahl;
        #endregion

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.AutoSizeMode = AutoSizeMode.GrowAndShrink;
            ButtonsErzeugen();
        }

        public void Handler(object sender, EventArgs e)
        {
            if (_Vermient)
            {
                for (int i = 0; i <= Buttons.Length -1; i++)
                {
                    if (_Vermient)
                    Buttons[i].BackColor = Color.Red;
                }
            }







           /* _Name = Convert.ToString(((Button)sender).Name).Split(new Char[] { ':' });
            _ButtonNummer = Convert.ToInt32(_Name[1]) + 1;
            //MessageBox.Show("Feld " + _ButtonNummer + " angeklickt!");

            for (int i = 0; i <= Buttons.Length - 1; i++)
            {
                Buttons[i].Text = _ButtonNummer.ToString();
            }*/
        }

        private void anfänger1010ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Buttons.Length > 0)
            {
                AlleButtonsLöschen();
            }
            _FeldGroesse = 10;
            this.AutoSizeMode = AutoSizeMode.GrowAndShrink;
            ButtonsErzeugen();
            ButtonsAnzeigen();
        }

        private void fortgeschritten1515ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (Buttons.Length > 0)
            {
                AlleButtonsLöschen();
            }
            _FeldGroesse = 15;
            ButtonsErzeugen();
            ButtonsAnzeigen();
        }

        private void AlleButtonsLöschen()
        {
            foreach (Button button in Buttons)
            {
                this.Controls.Remove(button);
                _PosY = 30;
            }
        }

        public void ButtonsErzeugen()
        {
            Buttons = new Button[_FeldGroesse * _FeldGroesse];
            Random r = new Random();
            zufallszahl = r.Next(0,2);
            this.Text = zufallszahl.ToString();

            int i = -1;
            //for (int i = 0; i <= Buttons.Length - 1; i++) 
            for (int y = 0; y <= (Math.Sqrt(Buttons.Length)) - 1; y++)
            {
                for (int x = 0; x <= (Math.Sqrt(Buttons.Length)) - 1; x++)
                {
                    if (i < (_FeldGroesse * _FeldGroesse) - 1)
                    {
                        i++;
                    }
                    Buttons[i] = new Button();
                    Buttons[i].Location = new Point(_PosX, _PosY);
                    //Buttons[i].Text = Convert.ToString(i + 1);
                    if (zufallszahl == 1)
                    {
                        Buttons[i] ?
                    }
                    Buttons[i].Size = new Size(_Groesse, _Groesse);
                    //Buttons[i].FlatStyle = new FlatStyle;
                    Buttons[i].BackColor = Color.LightCoral;
                    Buttons[i].Click += Handler;
                    Buttons[i].Name = Buttons[i].ToString() + i.ToString();
                    _PosX += _Groesse;
                }
                _PosY += _Groesse;
                _PosX = 0;
            }
        }

        public void ButtonsAnzeigen()
        {
            this.Controls.AddRange(Buttons);
        }
    }
}


hier uns da sind zeilen auskommentiert, die vorerst nur zu testzwecken dienten.

Also,
ist es möglich einem Button eine zusäzuliche eigenschaft zu zu weisen? Im code sind fragezeichen, DA muss die eigenschaft verändert werden, Dazu muss sie aber erstmal da sein. wie mach ich das?


danke an die hilfe bis jetzt und ich hoffe ihr helft mit fleißig weiter,,,, was auch gut wäre, das ganze über icq laufen zu lassen =)
 
Hallo,

beim Setzen der Location setzt du doch schon eine Eigenschaft des Buttons, genauso kannst du es auch hier machen.
z.B.:
Code:
Buttons[i].ForeColor = Colors.Blue;
Nur eben die Eigenschaft nehmen, die du verändern willst.

MfG
Fabsch
 
nein nein, ich meine eine eigene boolische eigenschaft hinzufügen... und zuwar die eigenschaft ob der button vermient ist oder nicht
 
Aso, ähm, dafür musst du dir eine eigene Komponente machen.
Einfach eine neue Klasse zum Projekt hinzufügen, diese von der Klasse Button ableiten, und dann eben eine Variable wie z.B.:
Code:
public bool HatMine = false; // Edit: der Variablenname ist hier Deutsch ;)
Dort drin deklarieren und dann in deinem Form, anstelle von einem Button-Array, ein Array von deiner Klasse machen und auch die Instanz nicht von der Klasse Button, sondern von deiner gerade erstellten Klasse erzeugen.

Alternativ kannst du auch einfach die Tag-Eigenschaft benutzen und dort z.B. eine 0 und eine 1 (0 = false, 1 = true) reinschreiben. (falls die Tag-Eigenschaft nicht für sowas gedacht ist, dann probier es mit der ersten Möglichkeit, aber ich weiß nicht wofür die Eigenschaft Tag genau da ist :rolleyes: )

MfG
Fabsch
 
Alternativ kannst du auch einfach die Tag-Eigenschaft benutzen und dort z.B. eine 0 und eine 1 (0 = false, 1 = true) reinschreiben. (falls die Tag-Eigenschaft nicht für sowas gedacht ist, dann probier es mit der ersten Möglichkeit, aber ich weiß nicht wofür die Eigenschaft Tag genau da ist :rolleyes: )

C#:
//
// Summary:
//     Gets or sets the object that contains data about the control.
//
// Returns:
//     An System.Object that contains data about the control. The default is null.
Ist wie du richtig vermutet hast eine Hilfseigenschaft der du ein Objekt/Wert zuweisen kannst.
Mit diesem Objekt kannst du dann hantieren wie de lustig bist.

Ich persönlich würde aber nicht 0 oder 1 halten, sondern mir eine eigene Statusklasse oder so erstellen.
 
Zuletzt bearbeitet von einem Moderator:
Zurück