TextBox einer Klasseninstanz übergeben



  • Hi,
    ich habe ein CppCLR_WinformsProjekt (Visual Studio 2019)
    und frage mich gerade wie man hier vorgeht um einer Klasseninstanz ein Steuerelement zu übergeben.
    Hier meine Idee:
    Die Klasse Anzeiger besitzt die Methode anzeigen(), welche einen Text in die textBox1 auf dem Form1.h schreiben soll.
    Vielleicht irgendwie so:

    Anzeiger.h:

    #pragma once
    ref class Anzeiger
    {
    public:
    	void anzeigen(System::Windows::Forms::TextBox tb);
    };
    

    Anzeiger.cpp:

    #include "pch.h"
    #include "Anzeiger.h"
    
    void Anzeiger::anzeigen(System::Windows::Forms::TextBox tb)
    {
    	tb.Text = "Hallo";
    }
    

    Form1.h:

    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
    Anzeiger A1;
    A1.anzeigen(textBox1);
    }
    

    Fehlermeldungen:

    Funktion "Anzeiger::anzeigen" kann nicht mit der angegebenen Argumentliste aufgerufen werden.

    "void Anzeiger::anzeigen(System::Windows::Forms::TextBox)" : Konvertierung von Argument 1 von "System::Windows::Forms::TextBox ^" in "System::Windows::Forms::TextBox" nicht möglich



  • @theAnfänger77 was ist deine Frage?



  • Du solltest nicht C++/CLI für WinForms-Projekte verwenden: Windows Forms und Visual C++ MACHT KEINEN SINN!

    Beachte auch die Fehlermeldung genau (ein spezielles Zeichen)!
    Aber selbst wenn du den Fehler behebst, würdest du so zur Laufzeit eine NullReferenceException erhalten...

    Tue dir selber einen Gefallen und benutze entweder C# für WinForms oder aber natives C++ mit einem passenden Framework (s. [HOWTO] Welches Toolkit für GUIS?).



  • Danke!
    Windows Forms-App (.NET Framework) ist sehr viel einfacher!

    Form1.cs:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Anzeiger A1 = new Anzeiger();
                A1.anzeigen(textBox1);
            }
        }
    }
    

    Anzeiger.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WindowsFormsApp1
    {
        class Anzeiger
        {
            public void anzeigen(System.Windows.Forms.TextBox TB)
            {
                TB.Text = "Hallo";
            }
        }
    }
    

Log in to reply