none
Event in fremden Steuerelement deklarieren RRS feed

  • 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

    Freitag, 10. Juni 2011 22:52

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
    Samstag, 11. Juni 2011 13:26
    Moderator
  • 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
    Samstag, 11. Juni 2011 07:55
  • 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
    Samstag, 11. Juni 2011 13:22
    Moderator
  • Hallo Thorsten,

    vielen Dank für den Hinweis! ;)

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Samstag, 11. Juni 2011 18:48

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
    Samstag, 11. Juni 2011 07:55
  • 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
    Samstag, 11. Juni 2011 13:22
    Moderator
  • 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
    Samstag, 11. Juni 2011 13:26
    Moderator
  • Hallo Thorsten,

    vielen Dank für den Hinweis! ;)

    Viele Grüße
    Holger M. Rößler


    Kaum macht man es richtig, schon funktioniert es
    Samstag, 11. Juni 2011 18:48
  • Danke für die Tipps

    Gruß Krock

    Montag, 13. Juni 2011 12:51