Visual C++: Äh wie geht das jetzt?!

KeinNameFrei

Enthusiast
Thread Starter
Mitglied seit
13.09.2008
Beiträge
3.195
Ort
Oben uff'm Speischer
Nachdem mir in meiner ganzen Schul- und Berufsschulzeit noch nie jemand etwas anderes beigebracht hat als einfache Kommandozeilenprogramme in C++, wollte ich jetzt auch endlich mal etwas mit einer grafischen Oberfläche produzieren!

Okay, Visual C++ 2008 Express runtergeladen, Projekt angelegt, per drag&drop Elemente aufs UI gezogen... is ja noch ganz eingängig. Per trial&error habs ich dann tatsächlich auch geschafft, dass sie sich gegenseitig beeinflussen können (Statusbar füllt sich auf Knopfdruck etc.)

So langsam bin ich aber mit meinem Latein am Ende, denn die Hilfsfunktion ist eine mittlere Katastrophe. Sicherlich findet in dem Ding ein jeder auch noch die kleinsten Details und Informationen, wenn er weiß, was genau er sucht. Für jemanden wie mich, der nicht mal ne Ahnung hat, wie das Element jetzt heißt, das ich brauche... da fass ich mir nur noch an den Kopf.

Gibts da vielleicht Ressourcen, die einem das Ganze etwas einsteigerfreundlicher rüberbringen? Im Stickythread gibts sowas für VB und C#, aber ich bräuchte C++... wat anderes kann ich nicht!

Falls dem nicht so ist - kann mir zumindest einer sagen, wie ich einen Button anlegen kann, auf den ich klicke, der dann ein neues Fenster erzeugt, in dem ich Einstellungen vornehmen kann? So Optionsmenümäßig?

Bis zu System::Void button_Click( ) { } bin ich schon selber gekommen (ui toll gell :fresse:), aber was in die geschweiften Klammern muss...
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Ja - das ist ein bissel unübersichtlich. Da hilft nur Beispiele suchen und Ansehen und etwas Erfahrung mit dem .net-Zeug.

Dein konkretes Problem geht etwa so:

Code:
  OptionDialog^ opt = gcnew OptionDialog();
  opt->ShowDialog();
  delete opt;

Das Formular mußt du natürlich noch bauen - ist aber prinzipiell nicht anders als dein Hauptfenster.
 
Ah ja, Danke.

Und was ist mein Hauptfenster genau? :shot:

Mein Hauptfenster heißt Form1, soll ich dann ein Form2 anlegen? Wo würde ich das finden (in der UI-Toolbox isses nicht)? Seh ich das Ding dann neben meinem Hauptfenster in der grafischen Ansicht? Wird das ne neue header-Datei, oder kommt das in dieselbe? Kommt das mit vorgefertigtem OK-Button zum Schließen daher, oder muss ich den bauen? Wenn ja, wie bau ich den?

Sorry, ich bin ein Härtefall! :p
 
Joa... wunderbar hilfreich... :rolleyes:

Ich hab mittlerweile das hier erreicht:
Form^ SetDialog = gcnew Form;
SetDialog->Visible = true;
SetDialog->Activate();

Das öffnet mir ein neues leeres Fenster.

Wie krieg ich das Fenster denn jetzt mit UI-Elementen ausgestattet? Da es nur zur Laufzeit aufgerufen wird, erscheint es ja nicht in meiner grafischen UI-Bau-Ansicht...?
 
Mein Hauptfenster heißt Form1, soll ich dann ein Form2 anlegen? Wo würde ich das finden (in der UI-Toolbox isses nicht)? Seh ich das Ding dann neben meinem Hauptfenster in der grafischen Ansicht? Wird das ne neue header-Datei, oder kommt das in dieselbe? Kommt das mit vorgefertigtem OK-Button zum Schließen daher, oder muss ich den bauen? Wenn ja, wie bau ich den?

Wenn er von Form1, also Dialog, Windows, Button... wissen will dann ist es wurscht ob man jetzt mit c, c++, c#, basis... programmieren lernen! ;)
 
Zweites Fenster steht jetzt auch... damit ergibt sich ein neues Problem.

Fenster 1 hat einen Knopf, der Fenster 2 aufruft.
Fenster 2 hat Knöpfe, die die Anzeige in Fenster 1 verändern sollen.

Die Headerdatei von Fenster 2 ist per #include in der von Fenster 1 drin. Ich kann Fenster 2 also wunderbar öffnen und nach Herzenslust auf die Knöppe drücken. Allerdings weiß ich nicht, wie ich die Knöppe so programmieren kann, dass sie Elemente in Fenster 1 verändern können.

Hier hilft mir das C#-Buch übrigends in keinster Weise weiter. Dort wird das Problem nicht mal theoretisch angesprochen.

Ich wäre sehr Dankbar für eine schlichte Erklärung dazu,
- wo der Code für button_Click stehen muss, der mit dem Knopf in Fenster 2 zum Beispiel ein Label in Fenster 1 neu beschriftet
- wie er auszusehen hat (in C++, bitte bitte)
 
Na ich versuchs mal:

In Fenster 1 machst du eine Methode im Header:

Code:
public: void SetLabel1_Text(String^ text) {
             label1->Text=text;
          }

Jetzt mußt du noch dem Fenster 2 die Instanz von Fenster 1 mitteilen. Das geht am besten im Konstruktor. Dazu brauchst du noch ne Forward-Deklaration um keine zyklischen Includes zu bekommen.

Code:
// vor der Klasse
ref class Form1;

...

private: Form1^ form1;

// vorhandenen Konstruktor erweitern
public:
  Form2(Form1^ _form1)
  {
    InitializeComponent();
    //
    //TODO: Add the constructor code here
    //
    form1=_form1;
  }

In Fenster2-CPP-Datei (nicht im Header !) includierst du den Header von Fenster 1. Die entsprechende button_Click - Methode mußt du in der CPP-Datei implementieren !

Code:
System::Void Form2::button_Click(System::Object^  sender, System::EventArgs^  e)
{
  form1->SetLabel1_Text(textbox1->Text);
}
 
Na das klingt ja schonmal gut, auch wenn mir die hälfte davon wie bömische Dörfer vorkommt :d

Ich werd's mal ausprobieren.

---------- Beitrag hinzugefügt um 18:30 ---------- Vorheriger Beitrag war um 16:00 ----------

Okay, folgendes:

Public-methode in Form 1 ist angelegt.

Konstruktor von Form2 angepasst, und nach einer Stunde suchen tatsächlich darauf gekommen dass ich dann Form2^ form2 = gcnew Form2; noch ein (this) ranhängen muss ;)

Dann warf Form2.CPP den Fehler "Form2: Keine Klasse oder Namespace". Dann hab ich den Namespace, den Visual Studio für mein Projekt generiert hat, dort eingefügt.

Jetzt bekomm ich stattdessen die beiden Fehler "'button3_Click': Ist kein Element von 'Form2'" und "form1: nichtdeklarierter Bezeichner'". Wenn ich die Methode auskommentiere, kompiliert das Projekt fehlerfrei. Wenn ich wie "normal" die button3_Click methode in Form2.h anlege, indem ich in der grafischen Ansicht den Knopf doppelklicke, kommt "hat bereits einen Funktionsrumpf". Wenn ich den lösche, aber die Erstdefinition weiter oben in der Klasse drinlasse, kriege ich riesenmengen Fehler die mir wie Hieroglyphen vorkommen.

Die Header sind so eingebunden wie du gesagt hast - Form1.h in Form2.CPP. Und halt von vorher Form2.h in Form1.h, das hab ich ja selbst gemacht damit ich Form2 überhaupt aufrufen konnte. Jetzt kommt wahrscheinlich ein großer Schrei, aber das war das erstbeste was funktioniert hat...
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh