Inherited Listview Control Could Have Built In Cross Threading Capabilities?
May 15, 2009
I've not got any issues with Cross threading but I hate the amount of work involved in sorting cross threading issues out.I thought today that my inherited Listview Control could have built in cross threading capabilities; it would decrease the amount of work on the form, and tidy things up.I've got this to work (EnsureVisible method), BUT I'm a little stuck when it comes to the Items.add below is my example control.
I have a relatively simple question regarding the best way to call the DataGridView.Rows.Add function when it is inherited into the current control. Which is the best way to make the call to the inherited control? Call it directly in the invoke or call it using recursive-like function? They both seem to produce the same result, a row gets added and the quantity is returned, but which is the most efficient?The delegate: Private Delegate Function ReturnDelegate() As Object
The two ways are:
A) Private Overloads Function AddRow() As Integer If InvokeRequired Then Return CInt(Invoke(New ReturnDelegate(AddressOf AddRow)))
When inheriting class or control e.g. ListView, TreeView, etc..., what is the best way to distinguish between built-in methods/property/events and mine?
Currently, i start my methods/property/events with "aa" in order to make them at the top of auto complete list.
I have this situation where I want to set the visibility property on the form but I have a cross threading issue. I have coded it like the following but is it possible to achieve it on the property on itself.
I've problem with my application. I have one class frmMain, where I have one Listbox. I'm developing a separate class that lunches a couple of threads. They do some work, and in the end I want to show the data in the frmMain listbox. I'm using the following code:
One sub that handles the requests to the Listbox. I declare it in Module
Module Functions Public Sub ChangeText(ByVal ctrl As ListBox, ByVal str As String) Try If ctrl.InvokeRequired Then
I have an application with two forms - a splash form and the main form. The main form reads an XML file and displays data from the file in a rich text box. While that is happening the splash form is displayed. When the main form is ready to be displayed the splash form closes and the main form is displayed. I have a progress bar on the splash form to inform the user of the progress of the load. I want to set the maximum value for the progress bar to the number of elements in the XML file. In the main form I am using a reader to count the number of elements. After I get that number I wan to update the maximum on the progress bar control so it displays correctly. That is where I am getting the cross threading error. Now I could do that in the splash form. But where the real issue lies is I want to update the progress bar value every time I read an element in the main form process to read the XML file. That I don't think I can do in the splash form as it would duplicate the process of the main form and defeat the purpose of the splash form.
I have researched this issue but can't find an answer. I have tried the delegate route but I still get a cross-threading error. I assume that is because I am cross threading across forms.
I'm using Visual Basic 2010I've created a ListBox and a BackgroundWorker using designerI want to change the location of listbox using backgroundworker but I get the error as follows:"InvalidOperationException was Handled by user code:"Cross-thread operation not valid: Control 'ListBox1' accessed from a thread other than the thread it was created on
I am a student attempting to learn VB.NET on my own. Today I wanted to tackle the BackgroundWorker component. I found an excellent article online: How To Use a Background Worker. I successfully completed the walkthrough and even performed the "adventorous" part that dealt with working with controls updating across threads using delegates.Now I came to a part that I didn't understand how it was working. To summarize the following code, I have a delegate that has a Label and a String in its signature. I then have a subroutine that is called on the worker thread. Inside this subroutine the delegate is created and (I guess) ran again so that it is on the same (Main) thread. Please correct me if I'm wrong here.
Here is the method is performed on the worker thread: Private Sub My_BgWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles My_BGWorker.DoWork
I've been reading around trying to find out why I'd be getting this exception to no avail.
I'm using Visual Basic 2010.
Briefly, I have a "Settings Panel" form which takes a while to create (it contains a lot of labels and textboxes), so I create it in another thread.
After it's loaded, it can be viewed by clicking a button which changes the form's visibility to True. I use the following subroutine to handle invokes for my controls:
Public Sub InvokeControl(Of T As Control)(ByVal Control As T, ByVal Action As Action(Of T)) If Control.InvokeRequired Then
[Code]....
The SettingsTable.Create() method generates a bunch of Labels and TextBoxes based on the contents of the application settings and adds them to the SettingsTable.
When I click on the ViewSettingsPanel checkbox, I get a cross-thread violation error.
I looked around the site and the questions I found relating to this subject were for C# (the application that I am maintaining is written in VB.NET), so I apologize if I overlooked one. Here is where I am calling my thread:
I'm adding multi-threading facilities for the first time. I have a function that is wrapped to be run in a separated thread. This function retrieves data (text) from a combobox and it works for sure without multi-threading.
When I call it as multi-threaded, I get the following error when I try to retrieve the data from the cmobobox: Cross-thread operation not valid: Control 'cmb1stBL' accessed from a thread other than the thread it was created on.
It looks like a restriction of thread-safety... I assume that the child thread cannot read from his parent, to make sure that he doesn't change his parent data. So how can I read the data from the combobox? Should I read the comoboxbox data before calling the child thread?
I want to create a server control that inherits System.Web.UI.WebControls.Button but gives it special capability, now what do i mean? i want my button to be a confiorm button that will work like so:
Renders to the page as a button of lets say cancel after the user clicks it i want to catch the click event (within the server control) and now after the click makeing the button not visible and makeing some kind of content placeholder (that will render from the server control) visible. that content place holder will have 2 buttons inside of it: yes and cancel. I want the programmer that adds this control to be able to register a function to the click event of the yes button. and the second cancel confirmation button should make the first button appear agian. (i know how to do this all in the client side but this time i need it all as server events)
My question is this: how do i catch the click event? i want it all to be handled inside the server control itself. so a programmer that adds this control wont have to worry about anything but just needs to register to the click event of the "yes" button.
I have a page of checkboxes, I select a few of them, click submit, and go to a second page. on this page, I have a listview that is built using the checkboxes selected on the previous page. Now I'm wondering how i can add sortability to this listview.
In the past I would add CommandName='sort' CommandArgument='column' to the link on the header in the LayoutTemplate. But since my listview has it's header row outside of the listview, this doesn't seem to work. This is what I have so far:
<!-- header row (outside of listview, when I try to put it as a LayoutTemplate in listview i get an error, see below) --> <table>
[Code]....
I've tried to add a templatelayout in the listview, but that gives me an error on the line that binds the data (listview.databind() ), i'm assuming because this isn't possible.
I currently have 2 forms, one with a listview and the other with a button coded to add an item to the listview. I've just discovered though that any command, no matter how right the syntax, to a form from a different form doesn't work. The only command that does work is Form2.Show. Otherwise nothing happens. There are no errors whatsoever. All the items in each form are all set to public.
[Code] If I wanted to add 3 icons, the LV would add them like it normally would, but then, for some reason, it enters the loop again and that's when it throws this error: ex = {"Cross-thread operation not valid: Control 'ListView1' accessed from a thread other than the thread it was created on."}. I don't understand why, because I'm invoking the LV.
When I try to create an Inherited User Control everything goes fine until I specify the base control and press "Add" in the Inheritance dialog. The code in the newly created Control should have a "Inherited From" statement, but it doesn't and nothing works after that. I even tried following the ctlClocklib project and the same thing happened. ctlAlarmClock.vb was created but the "Inherited From" statement was missing.
I am creating an Extended DateTime picker. I have created a Class the inherits the Default DateTimePicker and Adds a new Property NullableValue. I have placed the control on a form and bound it to a Binding Source using the NullableValue Property. When I load the record the control updates as it should. But when I change the value and save it does not save back to the database.
I recently wrote an inherited picturebox control. From within the control inside methodI I call Me.Invalidate to fire the control onpaint event. But onPaint does not fire.
I'm trying to create my own control to build a custom planning on it.After trying it with loose controls I got an error but after advice on my previous post, I redraw everything.I have now the header of the control finished, the header shows the days of the month for as many months that fit in the window.Now I want to put the list of data below it, but it will be more than the windows height, so I need to have a scroll bar that will scroll the data but not the header.I would not like to design my own scrollbar and rather use the scrollbar control for it, but when I put it in, I cannot use the NEW keyword.example:
Dim sb As ScrollBar
with this I get the error message: 'New' cannot be used on a class that is declared 'MustInherit'.How can I get a scrollbar on my form to scroll the list only (so not the header)?
i created a user control and inherited a textbox.is it possible to remove some of the inherited properties of the user control?like to Multi-Line, PasswordChar etc also at the Form Design, when selecting the user control, there's an arrow on the upper-right which i also want to remove.
I am trying to make a listview custom control based on the standard listview control that will allow me to drag a column header outside the standard listview control and drop it on a panel. I plan to use the drop event to determine which column I should group by view on.
I frequently use TextBoxes that expect date values. I do a tedious job every time to handle the Validating event. The Validation event ensures that the value is a valid date value according to the current thread's Calendar, and if so, formats the date to "dd-MM-yyyy".
I want a TextBox (e.g. DateTextBox) that automatically runs validation and formats its Text property. All I have to do is dropping it to the form.
I know I should use inheritance; but I do not know where to put the auto-validation code; and I do not know how to save the inherited class as a control in the ToolBox.
I've written my code to implement a new property and to set the content to this default text and grey the text whenever the textbox is empty, and to hide it when the user starts typing. This all works fine at runtime.[code]My question is this : If I place an instance of the control on a form, and set the DefaultText via the properties grid, why doesn't my Property Set code run?I'd expect the control on the form to show my new DefaultText in the control, but instead it remains blank. When I run the form it does display correctly, but just not at design time. I place a breakpoint in the DefaultText set property code and it simply doesn't run.