Benutzer mit den meisten Antworten
Event in fremden Steuerelement deklarieren

Frage
-
Hallo,
Ich habe mir ein Steuerelement gebaut, indem hauptsächlich ein Button vorhanden ist. Wenn ich nun mein Usercontrol in das Formular ziehe, möchte ich ein Click Event, von dem im Usercontrol vorhandenen Button. Jedoch soll der Prozess auf dem Formular zu definieren sein. Hier noch einmal Bildlich:
1. Usercontrol: Elemente:Button
2. Form: Elemente: Usercontrol; Prozesse: Click-Event vom Button (Im untergeordnetem Usercontrol)
Wie kann ich diesen Event mit Handle vom Button (welcher aber im Usercontrol ist) im Quellcode vom Form unterbringen?
Bedanke mich für Antworten schoneinmal im Vorraus. Gruß Krock
Antworten
-
Hallo Holger,
auch wenn der Code konvertiert ist, funktioniert 'Me.button1.Click += Function(sender, e) ' in VB nicht. Hier verwendet man AddHandler/RemoveHandler.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 12:51
-
Hallo krock derAhnungslose,
was meinst du mit Prozess? Meinst du damit den EventHandler?? Falls ja, sollte das doch kein Problem darstellen, du deklarierst in deinem UserControl das Event, das das ClickEvent vom Button weiter nach außen leitet. Wenn der Event in deinem UserControl als public deklariert ist, kann sich die Form ganz normal an den Event hängen!
Das würde so aussehen:
using System; using System.Windows.Forms; namespace WindowsFormsControlLibrary1 { public partial class UserControl1 : UserControl { public event EventHandler Button_Click; public UserControl1() { InitializeComponent(); this.button1.Click += (sender, e) => { if(this.Button_Click != null) { this.Button_Click(this, EventArgs.Empty); } }; } } }
@edit: Ok, bin hier im VB Forum. Leider bin ich der VB Syntax nicht so mächtig, habe daher meinen C# Code von einem Conversion Tool umwandeln lassen, ich hoffe, es passt trotzdem:
Imports System.Windows.Forms Namespace WindowsFormsControlLibrary1 Public Partial Class UserControl1 Inherits UserControl Public Event Button_Click As EventHandler Public Sub New() InitializeComponent() Me.button1.Click += Function(sender, e) RaiseEvent Button_Click(Me, EventArgs.Empty) End Function End Sub End Class End Namespace
Ich hoffe ich konnte dir weiterhelfen ;)
Viele Grüße
Holger M. Rößler
Kaum macht man es richtig, schon funktioniert es- Bearbeitet Holger M. Rößler Samstag, 11. Juni 2011 08:01 Code für VB.Net eingefügt
- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 12:52
-
Hallo,
wirklich klar ist es nicht, was Du eigentlich meinst. Du wirfst mit Begrifflichkeiten um Dich, die eher aus einem anderen Kontext stammen und hier Verwirrung stiften.
Anbei ein Beispiel, das zwei Varianten darstellt:
1. Nutzung des Click Ereignisses des UserControl (von Control geerbt)
2. Definition eines eigenen Ereignisses 'ButtonClick'
Public Class UserControl1 Public Event ButtonClick As EventHandler Protected Overridable Sub OnButtonClick(ByVal e As EventArgs) If Me.ButtonClickEvent IsNot Nothing Then RaiseEvent ButtonClick(Me.Button1, e) End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Me.OnClick(EventArgs.Empty) Me.OnButtonClick(EventArgs.Empty) End Sub End Class
Wenn Du das Projekt neu erstellt hast und dieses UserControl in einem Formular verwendest, gibt es dort neben dem Click Ereignis auch ein ButtonClick Ereignis zur Auswahl. Beachte, dass in obigen Beispiel das Click Ereignis auch ausgelöst wird, wenn auf die Fläche des UserControl geklickt wird. Das kann durch Überschreiben der OnClick Methode vermieden werden.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 12:51
-
Hallo Thorsten,
vielen Dank für den Hinweis! ;)
Viele Grüße
Holger M. Rößler
Kaum macht man es richtig, schon funktioniert es- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 11:39
- Tag als Antwort aufgehoben krock derAhnungslose Montag, 13. Juni 2011 11:39
- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 12:51
Alle Antworten
-
Hallo krock derAhnungslose,
was meinst du mit Prozess? Meinst du damit den EventHandler?? Falls ja, sollte das doch kein Problem darstellen, du deklarierst in deinem UserControl das Event, das das ClickEvent vom Button weiter nach außen leitet. Wenn der Event in deinem UserControl als public deklariert ist, kann sich die Form ganz normal an den Event hängen!
Das würde so aussehen:
using System; using System.Windows.Forms; namespace WindowsFormsControlLibrary1 { public partial class UserControl1 : UserControl { public event EventHandler Button_Click; public UserControl1() { InitializeComponent(); this.button1.Click += (sender, e) => { if(this.Button_Click != null) { this.Button_Click(this, EventArgs.Empty); } }; } } }
@edit: Ok, bin hier im VB Forum. Leider bin ich der VB Syntax nicht so mächtig, habe daher meinen C# Code von einem Conversion Tool umwandeln lassen, ich hoffe, es passt trotzdem:
Imports System.Windows.Forms Namespace WindowsFormsControlLibrary1 Public Partial Class UserControl1 Inherits UserControl Public Event Button_Click As EventHandler Public Sub New() InitializeComponent() Me.button1.Click += Function(sender, e) RaiseEvent Button_Click(Me, EventArgs.Empty) End Function End Sub End Class End Namespace
Ich hoffe ich konnte dir weiterhelfen ;)
Viele Grüße
Holger M. Rößler
Kaum macht man es richtig, schon funktioniert es- Bearbeitet Holger M. Rößler Samstag, 11. Juni 2011 08:01 Code für VB.Net eingefügt
- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 12:52
-
Hallo,
wirklich klar ist es nicht, was Du eigentlich meinst. Du wirfst mit Begrifflichkeiten um Dich, die eher aus einem anderen Kontext stammen und hier Verwirrung stiften.
Anbei ein Beispiel, das zwei Varianten darstellt:
1. Nutzung des Click Ereignisses des UserControl (von Control geerbt)
2. Definition eines eigenen Ereignisses 'ButtonClick'
Public Class UserControl1 Public Event ButtonClick As EventHandler Protected Overridable Sub OnButtonClick(ByVal e As EventArgs) If Me.ButtonClickEvent IsNot Nothing Then RaiseEvent ButtonClick(Me.Button1, e) End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Me.OnClick(EventArgs.Empty) Me.OnButtonClick(EventArgs.Empty) End Sub End Class
Wenn Du das Projekt neu erstellt hast und dieses UserControl in einem Formular verwendest, gibt es dort neben dem Click Ereignis auch ein ButtonClick Ereignis zur Auswahl. Beachte, dass in obigen Beispiel das Click Ereignis auch ausgelöst wird, wenn auf die Fläche des UserControl geklickt wird. Das kann durch Überschreiben der OnClick Methode vermieden werden.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 12:51
-
Hallo Holger,
auch wenn der Code konvertiert ist, funktioniert 'Me.button1.Click += Function(sender, e) ' in VB nicht. Hier verwendet man AddHandler/RemoveHandler.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 12:51
-
Hallo Thorsten,
vielen Dank für den Hinweis! ;)
Viele Grüße
Holger M. Rößler
Kaum macht man es richtig, schon funktioniert es- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 11:39
- Tag als Antwort aufgehoben krock derAhnungslose Montag, 13. Juni 2011 11:39
- Als Antwort markiert krock derAhnungslose Montag, 13. Juni 2011 12:51