Array mit textBoxVerweisen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Array mit textBoxVerweisen

    Hallo allerseits,
    ich versuche gerade ein Sudokuspielfeld mit windowsForms zu bauen; dafür benutze ich 81 Textfelder.
    Um die Textfelder nicht alle einzeln ansprechen zu müssen, brauche ich ein Array, über das ich per Schleife auf die einzelnen Felder zugreifen kann.
    Bis jetzt habe ich folgendes in meinem Code:

    Quellcode

    1. private: array<System::Windows::Forms::TextBox^,2>^ Spielfeld;


    Wie bekomme ich jetzt aber meine Textboxen da hinein und wie spreche ich die einzelnen Felder an?
    Ich blicke da überhaupt nicht durch :(, kann mir dabei bitte jemand helfen?
  • Der Designer hängt das ^ automatisch dran, wenn er eine TextBox erstellt. Also habe ich es auch übernommen. Was genau es bewirkt -> keine Ahnung.

    Wenn ich das Array auf deine Weise zu deklarieren versuche, dann sagt er mir, dass ein systemeigenes Array diesen verwalteten Typ nicht enthalten kann. Von der Optik her wäre es mir auch lieber, das würde ich im Gegensatz zu dem verwendeten Array nämlich verstehen.
  • Nach kurzem Nachlesen in der MSDN dazu folgendes (alles ungetestet):

    Statt dem "2"er solltest du 81 reintun, oder ein verschachteltes Array:

    Quellcode

    1. array<System::Windows::Forms::TextBox^,81>^ Spielfeld;


    oder

    Quellcode

    1. array<array<System::Windows::Forms::TextBox^,9>^, 9> Spielfeld;


    Allokieren musst du den 2. Fall so:

    Quellcode

    1. Spielfeld = gcnew array<array<System::Windows::Forms::TextBox^,9>^, 9> ();


    Danach die Spielfelder initialisieren:

    Quellcode

    1. for (int i = 0; i < 9; ++i)
    2. {
    3. Spielfeld[i] = gcnew array<System::Windows::Forms::TextBox^,9> ();
    4. for (int j = 0; j < 9; ++j)
    5. Spiefeld[i][j] = gcnew System::Windows::Forms::TextBox ();
    6. }


    oder so ähnlich :)

    hth
  • Quellcode

    1. array<System::Windows::Forms::ComboBox^,2>^ Spielfeld;

    Die 2 steht für die zwei Dimensionen; war so also ok. Wobei ich zugeben muss, es mit deinem verschachteltem Array versucht zu haben. :D

    So habe ich jetzt den Speicher allokiert:

    Quellcode

    1. this->Spielfeld = (gcnew array<System::Windows::Forms::ComboBox^,2> (9,9));


    Das Initialisieren des Spielfeldes hat mit einer Schleife und

    Quellcode

    1. Spiefeld[i][j] = gcnew System::Windows::Forms::TextBox ();

    gut geklappt.

    Man, so eine Nervenarbeit wegen solchem Kleinkram eigentlich :evil:
    Danke für deine Hilfe phax
    Weißt du jetzt eigentlich, wofür das ^ steht?
  • Zitat aus der MSDN Seite:
    Unlike the new operator which in both Visual Studio .NET 2003 and Visual Studio 2005 returns a pointer, the gcnew operator returns a "handle," a new construct represented in the syntax by a caret (^). Handles refer to whole objects on the managed heap. That is, they cannot be used to point to the interior of types, and the compiler has a number of restrictions on their usage that enforce this behavior and that help the developer to use them correctly and safely. Handles do not allow pointer arithmetic, nor can they be cast to a void pointer or to any integral type. The asterisk and arrow operators are still used to dereference it, however.


    Ich hoffe du bist des englischen soweit mächtig ;)