C# Event von Komponente in Form

exeto

Lt. Junior Grade
Registriert
Juli 2007
Beiträge
435
Hi,

ich habe Testweise ein Projekt mit zwei WinForms und auf jeder Form ist 1 label drauf, bei beiden Forms hat das label den gleichen Namen.

Dann hab ich mir ein Benutzersteuerelement gebastelt.
Da sind 2 Buttons und 1 Textbox, die Buttons tragen nur 1 oder 2 in die Textbox ein on click.

Jetzt binde ich das Steuerelement auf meine Forms ein. Jetzt will ich wenn in der textbox 10 zeichen sind, dass der inhalt der textbox aus dem steuerelemt in das label auf der Form geschrieben wird.

Aber so, das ich nur das Steuerelement in die Form kopieren muss, sprich der Code sollte in dem Steuerelemnt stehen.
Ist die möglich, iwie hackt es da bei mir grad, wie ich das realisiere.

Grüße
 
Kurze Frage zu dem schwer verständlichen Text.

- Du hast ein Steuerelement erstellt
- dieses Steuerelement befindet sich in zwei verschiedenen Forms
- auf jeder Form ist nun noch ein Label (parallel zu Deinem Control)
- wenn jetzt ein Text in eine Textbox geschrieben wird und dieser gleich oder länger als 10 Zeichen ist:

a) soll das Label der eigenen Form auf den Event reagieren? (aus Sicht Deines Controls)
b) das Label der anderen Form (FormA => Event => Label FormB ?
c) falls a) was hat das dann mit der zweiten Form zu tun?
 
Hi,

für mich wars nicht so schwer verständlich :D liegt wohl daran weil ich dies grad bearbeite.

Also ich habe ein Projekt.
In dem Projekt gibt es 2 Forms, Form1 und Form2.
Form1 hat ein labelID und Form2 hat ein labelID.
Ich hab ein Benutzersteuerelement mit einem panel1 und in dem panel1 befindet sich eine TextboxID.

Jetzt will ich, dass die TextboxID bei Eingabe von 10 Zahlen, die eingegebenen Zahlen in das labelID schreibt.


Ich möchte aber gerne diesen Code nur einmal im Benutzersteuerelement hinterlegen.
Also wenn ich dann das Steuerelemt auf die Form1 oder Form2 bringe, soll es schon funktionieren.

Oder wenn noch 10 neue Forms mit dem labelID dazukommen, will ich nur das Benutzersteuerelement reinziehen aus der Toolbox und es funktioniert.
 
Dann pack doch das Label mit in dein UserControl... dann ist es auch immer dabei.
Sonst musst du das immer verdraten...
 
Das, was du vorhast, könnte man allgemein mit einer Controller-Klasse lösen. Diese nimmt eine TextBox und ein Label im Konstruktor an, registriert sich für das TextChanged-Event der TextBox und ändert dann ggf. das Label.
Das wäre dann nur eine Zeile Code, die du im Konstruktor der Form zusätzlich hinzufügen musst.

Du kannst dir natürlich auch ein eigenes Control, bestehend aus TextBox und Label schreiben, ist aber etwas unflexibler. Wie man dass dann in die Toolbox bekommt, kann ich dir aber nicht sagen.
 
TextChangedEvent der Textbox im Control abfangen, Deine Überprüfung einfügen und einen eigenen Event feuern, sobald die Bedingung erfüllt ist. Den Event in der Form abonieren und Deine Ausgabe realisieren.

Ansonsten auch durchführbar, wie meine Vorposter bereits geschrieben haben.

EDIT:
Oder wenn noch 10 neue Forms mit dem labelID dazukommen, will ich nur das Benutzersteuerelement reinziehen aus der Toolbox und es funktioniert.

Wenn das so sein muss, dann ist die Lösung von Erdmännchen die einfachste.
 
Zuletzt bearbeitet:
lbm1305AtWork schrieb:
TextChangedEvent der Textbox im Control abfangen, Deine Überprüfung einfügen und einen eigenen Event feuern, sobald die Bedingung erfüllt ist. Den Event in der Form abonieren und Deine Ausgabe realisieren.

Ansonsten auch durchführbar, wie meine Vorposter bereits geschrieben haben.

EDIT:


Wenn das so sein muss, dann ist die Lösung von Erdmännchen die einfachste.

Das es so anders auch möglich ist und einfacher ist konnte ich mir denken :D Trotzdem danke für die Antworten :)

Aber lbm1305 da kommen wir der Sache näher die ich machen will. Ich hab schon gedacht, dass ich da ein event schreiben muss.

"TextChangedEvent der Textbox im Control abfangen, Deine Überprüfung einfügen"
- Wie genau was abfangen?

"einen eigenen Event feuern, sobald die Bedingung erfüllt ist. Den Event in der Form abonieren"
- Hier komme ich überhaupt nicht weiter.

Grüße
 
Jedes Control bietet Events an. Die Textbox bspw. den TextChanged Event. Diese kann man "abonieren". Ist dies geschehen, kann man auch diesen Event lauschen

Code:
// Pseudocode

// Wird im Codebehind registriert
TextBox1.TextChanged += OnTextChanged;
...

// Handler Methode für den Event
private void OnTextChanged(sender, event)
{
     if(TextBox1.Text.Length >= 10)
         // Raise MyEvent
}

Eine simpler Event:
Code:
// Pseudocode:
public event EventHandler MyEvent;
...
        private void OnTextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text.Length >= 10)
            {
                if (MyEvent != null)
                {
                    MyEvent(this, EventArgs.Empty);
                }
            }
        }

So lange der Event der Textbox registriert ist, wird die Handler Methode immer dann angesteuert,wenn sich der Text ändert.

Die Registrierung des Control Events (MyEvent) würde in etwas so aussehen.

Code:
//pseudocode

MyUserControl myUserControl = new MyUserControl();
myUserControl.MyEvent += OnMyEvent;

// oder ähnlich der Textbox - Hier vergibt der Designer die Namen der Controls
myUserControl1.MyEvent += OnMyEvent;

Anmerkung:

Zum Thema Events: Informiere Dich am Besten
- MSDN
- Google => "C# events"
- Galileo Open Book für C#
 
Zuletzt bearbeitet:
Zurück
Oben