Event Raised In Constructor Cannot Be Handled Outside Very Class
Oct 26, 2009
I discovered that an event raised (directly on indirectly) in the constructor cannot be handled outside the very class. To prove if that was the actual problem, I wrote a simple exemplary app.
Class with the event:
Namespace Utils
Public Class A
Public Event Test()
Public Sub New()
CallTest()
[Code] .....
The reason of such behavior became quite obvious after writing those pieces, but maybe there is a way to omit it?
I have a "partial" class in VB.NET. Half of it is auto generated by a code generation tool. That half implements INotifyPropertyChanged, so any properties in that part of the partial class raise the PropertyChanged event.In my "custom" part of the class, I declare another property that depends on one of the properties in the auto-generated side. Therefore, when that auto-generated property changes, I also want to raise a PropertyChanged event on my custom property that depends on it.
If I go into the generated part of the class and raise the event there, that will get overwritten if I ever re-generate that part, so I don't want to do that. I would rather add an event handler in my side of the partial class that checks if the generated property changed, and if so, raise another event for my custom property.
[Code]...
I'm assuming it's because normally you'd use the WithEvents keyword to tell the compiler that you're subscribing to events from that object. I don't have a clue how to do this inside of the class that's actually raising the event, or if that's even possible.
I have a userControl11 (either in winform or wpf) which has a ValueChanged custom event. If I put it in client form and in form_load set its value to 100, it will trigger the ValueChanged event. But if I set this value inside the constructor of UserControl1 the custom event won't trigger. How can I force it to do so ?whatever the technical reason, functionally it does make sense. If the object is initializing its value from some sources unknown to the client form and the client form has a textbox bound to this usercontrol value, it is sure convenient that it could refresh its textbox at any time including when the form loads just using one single event handler. Without this the client form has to create another initializer for this bound textbox at form load.
Below the source code of my trials in winform:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;
I have an abstract class which requires a delegate to function. I pass the delegate into the constructor. Now that I have a non default constructor I need to call the abstract class's constructors from the concrete class which means that I need to use MyBase.New(...). I have included a quick example below.
Public MustInherit Class BaseClass Public Delegate Sub WorkMethod() Private _Work As WorkMethod
[code]....
I have tried to do this but I keep getting the following error: "Implicit reference to object under construction is not valid when calling another constructor".Can I not do what I am trying to do above? I initially had the delegate setup in its own setter method. But then I am creating a deceptive API because it does require a point to a method to work properly.
I am making a function of an application that when a function is called the application will close all processes that are owned by the user and were started after a specific point. My thoughts on this would be to trigger an event in my application every time a process is started and ended, and only if the processes is owned by the user, the event should get information (e.g. the process ID, name, etc) about that process and add or remove that information to/from an array depending on if the process starts or ends. Then when a function is called end all the processes in that array.
I've written some code to handle an event as follows:
AddHandler myObject.myEvent, AddressOf myFunction
It seemed that everything was working at first, but when I ran the debugger, I discovered that oftentimes, myFunction would run several times each time myObject.myEvent fired. I figured out that I had allowed the code to add the event handler to run more than once, resulting in this behavior.
Is there a way I can do something like this?
If myObject.myEvent is not handled Then AddHandler myObject.myEvent, AddressOf myFunction End If
Public Class Form1 Dim WithEvents bt As New Button Private Sub Bt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt.Click MsgBox("Click")
I have an ASP.Net web user control which represents a single entry in a list. To allow users to reorder the items, each item has buttons to move the item up or down the list. Clicking on one of these raises an event to the parent page, which then shuffles the items in the placeholder control.Code fragments from the list entry:
Public Event UpClicked As System.EventHandler Protected Sub btnUp_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUp.Click
[code]....
It originally looked in testing like every other time the value for sender (verified by its properties) that reaches UpClicked is of an adjacent ListItem, not the one I've just clicked on - the first click is always wrong, then the second for the correct control.At present,testing appears to show that the button's click event is just being ignored every other time through.Breakpoints on the click events within the control simply aren't being hit, though the events are definitely being established.
[code]But even here it seems the handler isn't registered until after New has completed.However, in real life the event is raised within code that's semantically part of the object initialisation, and I'd really rather not have to create some Initialize function.
I am trying to add to items to a combobox by using the "enter" key. It does work when I add the first item, but if I manually clear the box and add another items it does not get added to the list.
(1) I click in the combobox and type "hello" and press the "enter" key
(2) I click on the dropdown arrow and see that "hello" is in the list
(3) I select "hello" in the box and erase it, item is still in the list
(4) I type "goodbye" in the box and press the "enter" key
(5) "hello" is still in the list but "goodbye" is not
Here is the code:
Private Sub CopyrightCombo_Keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles CopyrightCombo.KeyPress If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
[code].....
if I comment the if/end if line and type "hello" the items added to the combobox list are: "h", "he", "hel", "hell", "hello" wich makes sens since the add items is run on every keypress? I know that my commands for adding items is good, I know that my keypress event is handled properly but not when I specify using the "enter" key.
I'm working on a Windows Service that watches a few folders for changes, creations, and deletions. It all works well with the exception of one watcher that watches a single file (XML File with Configuration Settings) for minor changes.
I tried taking the Windows Service code and putting it into a simple windows application with start/stop buttons for the filesystem watchers and stepped through it. It never detects the file change of the XML config file. The changes are indeed occurring and the "Date Modified" of the file is updating.
XmlEventReferences = New System.IO.FileSystemWatcher() XmlEventReferences.Path = "C:XmlReferences" XmlEventReferences.Filter = "*.xml"
I want to write an event that will simply display something when it is raised. I have never really worked with event driven programming before and am just trying to get a simple example working. It is not yielding any errors, but when I switch to debug mode I can see that the event it not raising correctly.
I have a user control named "LettersDropControl". It has a dropdown list. I am using this control in a aspx page. When I change the selected item it is not calling the ddlLetters_SelectedIndexChanged event handler? What change I need to make in order to execute the code in ddlLetters_SelectedIndexChanged event handler?
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LettersDropControl.ascx.cs" Inherits="MSAJAX1.LettersDropControl" %> public partial class LettersDropControl : System.Web.UI.UserControl { private string selectedLetter; public string SelectedLetter { [Code] .....
I must be missing something really basic, but I just can't figure this out. I have a module (declared as a Module, i.e. a VB "static class") and I have an event declared in it, and places to raise the event. But I can't figure out how to handle the event.
Let's call the module MyModule with an even MyEvent. Like so:
Module MyModule Public Event CallHelp() Sub ExamineStuff( ByVal input As String)
The event handlers in my parent class are never called though the events are raised in the child class.
The Code:
Public Class childForm Public Event checkboxchangedEvent(ByVal checkbox1 As Boolean, ByVal checkbox2 As Boolean) Private Sub checkboxchanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged
I have an MDI application that can either run in TABBED or WINDOWED mode. When a user selects something from the menu a form is shown. All menuItem clicks pretty much look the same:
Dim frm As New <SomeForm> frm.MdiParent = MDIParentForm frm.Show()
In a list of timers, how do I determine the index of the item that elapsed without having to iterate the collection as shown below (e.g. can I pass a paramater to OnTimedEvent, or can the collection raise an event to say which item fired???). It's the individual timer index that I need as I'm using it to refer to something else.
(I wont know how many items I'll have in the list in advance so I can't create an individual event handler for each timer - I don't think I should even if I did).
Public Class Form1 Private _timers As New List(Of System.Timers.Timer) Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
I'm new to VB and relatively fresh in programming in general. I'm trying to write code to make a label flash red. The method involves using a timer. Problem is, it flashes, but I can't figure out how to make it stop. xD Here's my
Private Sub SeleneExplainsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SeleneExplainsToolStripMenuItem.Click lblNumbers.ForeColor = Color.Red Timer1.Enabled = True AddHandler Timer1.Tick, AddressOf OnTimerEvent End Sub
I want to raise an event from a non-UI thread where the event will be handled by the UI. Currently, I have to use .Invoke in my methods (which updates UI) called from the event.
How can I raise the event, similar to Background Worker's progress update event, where I don't have to specifically do an .Invoke for UI updates?
Do I wrap the event with a delegate or something? Sample code will be fine though, if the explanation was tedious.
I am back with a problem again I have a grid and I am trying to implement sort for it.Basically I have binded the data manually to the grid now my problem is I do not know the code to be written for the sorting event:( some how managed to get the code for the page indexing :-/,...doesnot have much idea!! could you !!"experts" help me out by giving me some hint or sample code in VB.Net:icon_exclaim: unable go ahead further:
If I set a .ascx control's visible attribute to true, what event is called? What method can I create in that control's codebehind to act on this event?
I have some classes, BsfciFile and StudyFlashCard. Bsfci is the extension to which I save my set of flashcards in an INI format. I am currently working to transform my code from using Windows API calls to access the INI to using a IniFile class that I found on the internet. I would like the BsfciFile to have a Array of StudyFlashCard objects, but I would like the StudyFlashCard class to use the IniFile class object contained in the BsfciFile class. I can pass the IniFile from the BsfciFile class to the constructor for the StudyFlashCard class, but I want it to modify the same IniFile as the BsfciFile class has later on.
I have a central page loading child controls into a container in a Silverlight Project.Problem is events like button click events are fired twice after processing the child forms.Suspect it might have something to do with a double initializecomponent??
Private Sub btVolgende_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btVolgende.Click Select Case Stadium
I'm trying to capture the initial value of a listbox immediately after it's clicked on, and before the SelectedIndex is changed. The following was taken from: MouseDown in WinForm ListBox Kills SelectedIndexChanged, converted to VB. The ListBoxComponent Class is in a Component that shows at the top of the Toolbox.
Public Class ListBoxComponent Inherits ListBox Public Const WM_LBUTTONDOWN As Integer = &H201 Public Event PreSelect As EventHandler