ColorDialog anzeigen



  • Das Problem bleibt erhalten, wenn ich das zweite Fenster als owner angebe...



  • Aus Form1 die Form2 aufrufen:

    #pragma once
    
    #include "Form2.h"
    
    ...
    
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    {
    	Form^ _newForm = gcnew Form2();
    	_newForm->ShowDialog();
    }
    

    ColorDialog aus Form2 aufrufen:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
    {
    	ColorDialog^ _color = gcnew ColorDialog();
    
    	if(_color->ShowDialog() ==::System::Windows::Forms::DialogResult::OK)
    	{
    		this->BackColor::set(_color->Color);
    	}
    }
    

    Sieht das so in etwa bei Dir aus?

    So funzt der Code ohne Problem, ohne this-Zeiger...

    Gruß, Jan



  • Sieht das so in etwa bei Dir aus?

    So funzt der Code ohne Problem, ohne this-Zeiger...

    Bei mir funktioniert das von dir beschriebene leider nicht.

    Die Ausgangslage sah bei mir so aus (Ich hatte das Steuerelement bei der beschreibung des Status Quo leider vergessen)

    Steuerelement.h

    public ref class Steuerelement : System::Windows::Forms::Control {
        System::Windows::Forms::Button^ Bu;
        System::Windows::Forms::ColorDialog^ CD;
        Steuerelement() {
            Bu = gcnew System::Windows::Forms::Button();
            CD = gcnew System::Windows::Forms::ColorDialog();
        }
        void ButtonClick(System::Object^  sender, System::EventArgs^  e) {
            CD->ShowDialog();
        }
    };
    

    Form2.h

    #include "Steuerelement.h"
    public ref class Form2 : System::Windows::Forms::Form {
        Steuerelement^ SE;
        Form2() {
            SE = gcnew Steuerelement();
        }
    };
    

    Form1.h

    #include "Form2.h"
    public ref class Form1 : System::Windows::Forms::Form {
        void ButtonClick(System::Object^  sender, System::EventArgs^  e) {
            Form2 form;
            form->ShowDialog();
        }
    };
    

    (Code natürlich auf das Wesentliche gekürzt...)

    Wenn ich nun einen owner für CD festlege, sei es nun this oder Form2, wird der Dialog nicht vernünftig angezeigt.



  • Du musst bei allen ShowDialog jeweils das Fenster als Parent angeben...



  • Jochen Kalmbach schrieb:

    Du musst bei allen ShowDialog jeweils das Fenster als Parent angeben...

    Das nützt leider nichts...



  • Ich verstehe Dein ganzen Code nicht.
    Der Aufruf von Form2 kann nicht funktionieren. Wo erstellst Du die Instanz von Form2?

    Was beabsichtigst Du eigentlich?

    Gruß, Jan



  • Jan B. schrieb:

    Der Aufruf von Form2 kann nicht funktionieren. Wo erstellst Du die Instanz von Form2?

    Wieso kann der nicht funktionieren? Er funktioniert doch. Ich verzichte lediglich auf den Pointer...

    Die Instanz wird hier erstellt:

    Form2 form;
    


  • Ich würde Dir gerne helfen, wenn ich den Code so...

    Form2 form; 
    form->ShowDialog();
    

    schreibe, bekomme ich...

    Fehler 1 error C2819: Der Typ 'Tst::Form2' hat keinen überladenen Elementoperator '->' c:\users\JanB\desktop\tst\tst\Form1.h 89

    Dein Projekt ist eine WindowsForms-Anwendung? in VS 2003, VS2005, VS 2008 oder VS2010 Beta?

    Ich kriege das so nicht auf die Pfanne, sry...



  • Der C ode ist falsch kopiert... wenn er Stack-Semantic verwendet, so muss er anstall "->" ein "." verwenden...



  • Jochen Kalmbach schrieb:

    Der C ode ist falsch kopiert... wenn er Stack-Semantic verwendet, so muss er anstall "->" ein "." verwenden...

    Den habe ich jetzt nicht ganz vestanden...

    Das ist doch C++/CLI Code!?



  • Ja, ein Tipfehler... Dort muss natürlich ein . stehen und dort steht in meinem Programm auch eigentlich ein .

    Das ist doch C++/CLI Code!?

    Ja ist es. Aber man ist nicht immer gezwungen, mit Pointern zu arbeiten.



  • Mr X schrieb:

    Ja ist es. Aber man ist nicht immer gezwungen, mit Pointern zu arbeiten.

    Naja, sagen wir mal so: Es sieht synatktisch so aus, also es ein keine Pointer sind (die ja auch in Wirklichkeit "Referenzen" heissen").
    Stack-Semantic heisst aber eben deshalb "Semantic", da es sich nur so _anfühlt_! Es sind aber in Wirklichkeit Referenzen...



  • Jochen Kalmbach schrieb:

    Mr X schrieb:

    Ja ist es. Aber man ist nicht immer gezwungen, mit Pointern zu arbeiten.

    Naja, sagen wir mal so: Es sieht synatktisch so aus, also es ein keine Pointer sind (die ja auch in Wirklichkeit "Referenzen" heissen").
    Stack-Semantic heisst aber eben deshalb "Semantic", da es sich nur so _anfühlt_! Es sind aber in Wirklichkeit Referenzen...

    Das hatte ich bereits vermutet, aber noch nicht gewusst. Danke für die Info. Das erklärt auch, warum die Umgehung von Pointern nur so eingeschränkt möglich ist.



  • Ich gehe mal davon aus, dass Problem wurde behoben!?
    Läuft jetzt alles, auch ohne Pointer!?



  • Um den Pointer ging es nicht... Der tat es schon vorher. Es ging darum, das der ColorDialog nicht direkt angezeigt wird. Das Problem ist noch nicht gelöst.



  • Hast Du bei *allen* ShowDialog aufrufen das *Parent-Form* übergeben????
    Also, bei dem Control, musst Du den Parent übergeben!


Anmelden zum Antworten