Laden...

Probleme mit UserControl und Form

Erstellt von Kumel vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.627 Views
K
Kumel Themenstarter:in
2 Beiträge seit 2011
vor 8 Jahren
Probleme mit UserControl und Form

Hallo zusammen,

ich habe kein kleines Problem und komme trotz Suche nicht wirklich weiter.
Ich habe eine Form mit einem UserControl1.
Das UserControl1 erhält eine Referenz zur Form, da ich hier Daten übergeben/holen möchte (Realisiert mit Button in der Form und im UserControl)

In der Praxis funktioniert das Ganze auch, aber sobald ich in den UI Editor gehe erhalte ich folgende Fehlermeldungen: > Fehlermeldung:

"Der Typ UControl2Form.UserControl1 hat keinen Konstruktor mit Parametern der Typen Form"
"Die Variable userControl1 wurde nicht deklariert oder nicht zugewiesen"

Was muss ich tun, um diese Fehlermeldungen zu beseitigen? Vielleicht kann mir jemand hier weiterhelfen.

Als Anhang habe ich ein einfaches Beispiel meines Problems.

Grüße
Robert

Hinweis von MrSparkle vor 8 Jahren

Anhang entfernt.

Bitte beachte [Hinweis] Wie poste ich richtig?, Punkt 4.1

4.938 Beiträge seit 2008
vor 8 Jahren

Hallo,

der UI-Designer benötigt immer einen parameterlosen Konstruktor.

Deine Vorgehensweise ist aber falsch, da ein untergeordnetes Control (UserControl) niemals seinen Parent (Form) kennen sollte.
Lies dir mal [FAQ] Kommunikation von 2 Forms und/oder meinen gleichnamigen Artikel (aus meiner Signatur) durch.

K
Kumel Themenstarter:in
2 Beiträge seit 2011
vor 8 Jahren

Hallo Th69,

danke für deine schnelle Antwort. Ich habe mir deine Links (Kommunikation zwischen zwei Forms) mal angeschaut - merci nochmal. Mein Problem war jedoch der Zugriff von UserControl auf die (main)Form.

Letztendlich habe ich dennoch eine Lösung meines Problems gefunden.
Hier nur als Beispiel aufgeführt...


...
     Form1 form1 = Application.OpenForms[0] as Form1;
     if (form1 == null)
     {
       MessageBox.Show("Keine Hauptform vorhanden!");
       return;
     }
     else
     {
          form1.Textbox.Text = "bingo";
     }
...

Das mit dem "der UI-Designer benötigt immer einen parameterlosen Konstruktor." war mir so nicht bewusst, da das Programm den Aufruf mit Parameter ohne Probleme vollzogen hatte - nur der UI-Designer wollte nicht mitspielen.

Danke nochmal für deine Hinweise...

Grüße
Robert

4.938 Beiträge seit 2008
vor 8 Jahren

Ob nun von einer anderen Form oder von einem untergeordneten (User)Control ist egal - benutze für beides ein Ereignis (event):


// in MainForm
userControl.TextChanged += UserControl_TextChanged;

void UserControl_TextChanged(object sender, TextEventArgs e)
{
    Textbox.Text = e.Text;
}

// in UserControl
public event EventHandler<TextEventArgs> TextChanged;

private void OnTextChanged(string text)
{
   var e = TextChanged;
   if (e != null)
   {
        e(this, new TextEventArgs(text));
   }
}

TextEventArgs kannst du dann, so wie in meinem Artikel erklärt, im UserControl erzeugen.

Ein No-Go ist es übrigens, Zugriff auf Interna (z.B. TextBox) per "public"-Setzen, zu ermöglichen.