Put The Code Of A Paint Event In A Different Thread?
Aug 18, 2009the code below doesn't works...
[Code]...
the code below doesn't works...
[Code]...
I'm trying to follow the technique discribed by jmcilhinney in this HTML [URL]..I have all the drawing code in the .Paint event. Reading the above mentioned thread I would need .Invalidate(all or parts of the picturebox) AND .Update() in order to repaint (all or parts of) my PictureBox, however in my case it works without .Update. Am I doing something wrong?
View 5 RepliesI've created a schedule panel,drawing some lines,and adding some labels,as in image(blue,red and green are labels added by code).Now I've put some code to show the number for each cells,for that I've used Paint event of the panel but this slow the paint event,and after some investigation I found that the paint event was raised for some 20 time on my first form shown.Is there a place to put this code to run only once ?
[code]...
My understanding is that thread.join will suspend the execution of code on the calling thread until the spawned thread finishes or is aborted...
With that in mind, I tried this:
For i = 1 to 50
threads = New Thread(AddressOf test)
threads.IsBackground = True
threads.SetApartmentState(ApartmentState.STA)
[CODE]...
However, the rest of the code runs when the loop finishes, not waiting for all the spawned threads to finish. Since the rest of the code needs the threads to finish (otherwise the rest will error).
How can I cause the Paint event to fire from a Form_Click() event? This is what I'm trying to do...
Public Class StrTests01
Private Sub StrTests01_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
Dim ps As Graphics = Me.CreateGraphics()
[code]....
The only way I know to force a paint event in my pictureboxes is to do a 'Picturebox1.invalidate'. I read that this isn't the best way to do it though, so what's the best way to make my picture boxes repaint?
View 8 RepliesWeird issue: I have application that I fire some code in the Form_Paint event for the main form, it works fine on my machine, but on other machines is not working at all.
I tried to debug the code on the other machine, and Form_Paint event is not triggered at all!
I was wondering how i would go about threading a paint event. I know the basic multithreading but i cant figure out how i would go about applying this on a paint event. This is the way i know how to go about multithreading.
[Code]...
so im making a projectile motione simulator for physics project got it all working and im drawing the path of the object with this code
e.Graphics.DrawRectangle(Pens.Red, 25 + xcord(counter1), 600 - ycord(counter1), 1, 1)
however it will draw it behind objects for example if i have a groupbox it will draw(i assume its still drawing at leaste) behind the group box and i cant see it
[url]... I managed to figure out how to paint a bitmap on a form. With some slight modification, I managed to make it so that the position of the bitmap can change based on key strokes.However, for some reason, it only does this once. It can't be that the xPosition and yPosition aren't responding since I rigged two labels to tell me their values and they are changing. So how can I make the bitmap respond.[code]...
View 1 RepliesI want to create a track bar using paint event, but the problem is on mouse move event<Me.Invalidate()> is very slow since the graphic become unvisible for milli seconds and then return back, is there a way to make it faster?(doesn't become invisible)
View 2 Repliesi've an owned form that never raise the paint event, and so i can't make it rounded...
View 6 Repliescorrect way to draw rectangles onto a picturebox, and also to explain the paint event more clearly.Basically I have an application where a picturebox contains an image, this image is a small computer monitor as such:
The idea of this part of my application is that the user can draw small window size rectangles which represent windows later on. I have already used some excellent code on this forum to be able to draw the rectangles on the picturebox (As pictured above), the rectangle outline is drawn from MouseDown and MouseUp respectivley.
The problem I am encountering is with the 'repainting' of this rectangle. I have included code to repaint the rectangle in the Paint event of the picturebox. This works when you move the picturebox 'off screen' and bring it back. However when the form is re-sized or other various things occur the rectangle is not re-drawn? even though the picturebox 'appears' to be clean and always there!
My code is below, it is not full and complete, but the few main subs listed should give an indication as to how I am currently creating the rectangle:
Private Sub picboxAdvDisplay_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picboxAdvDisplay.MouseDown
'Set the flag for Drawing enabled
[code]....
1. What is the CORRECT way to draw a rectangle onto a Picturebox?
2. How do you code so that the rectangle is ALWAYS visible/drawn on a form re-size, minimise, window overlap etc etc.
during the development of my project, i've the need to raise the paint event of a form, to make it with rounded angle.The strange thing is that, when i use the invalidate comand on it, the repaint event (that sometimes doesn't go and i don't know why), doesn't make it like i need, that is, the dimension of the side is one instead of six pixel, and the angle are rounded, but the border is not visible.
View 1 RepliesI've got a bug in my program that I can't work out, during a paint event. The only way I can think to solve it is to watch the screen being updated one thing at a time. Problem is, I've put a break in and then I try stepping through the program one line at a time, but when I go to look at the screen it's blank - probably because I'm in the middle of a paint event? Is there some way that I can get my screen to update after each command?
View 4 RepliesI am trying to use the key's W and S to change the Y cordinate of a rectangle. The key's work, but the graphic doesnt update [code]...
View 4 RepliesFrom jmchillihiney's most excellent code bank sumission on Drawing:Quote:The way GDI+ works, controls get repainted on screen over and over again, sometimes many times in quick succession. On each of these occasions the control's Paint event is raised. You need to use the Paint event of the control to perform your own drawing or else, the next time the control is repainted, your drawing will just disappear as the control paints over it.
When you're creating a custom control you should override the OnPaint method and perform your drawing there. When you're designing a form or user control and you want to add custom drawing to a child control you handle that control's Paint event, then perform your drawing in the event handler.
You may have seen, or heard people talk about, controls flickering on screen. That's caused by repainting large areas of the control repeatedly and happens because painting on screen is actually quite a slow process. As such, you should try to do as little of it as possible.So, I am attempting to draw part of a custom control. I have placed a SplitContainer on a UserControl, and oriented it vertically. I then shrunk to top panel to 15 pixels in height. I have two Methods which each draw a different type of Path + fill into the panel, and then draw a border around it (One is a gradient fill, and the other is just a plain color). The idea is that when the user clicks on this panel, it switches from one to the other (a "Selected State" and "Not-Selected" state).
I have also created an icon which looks like the +/- widget on a treeview (or more specifically, on the vs2008 Toolbox, which is essentially what I am trying to emulate here . . .) which toggles as the control is selected/unselected. Not that ultimately, the selected state will change when the user selects OTHER controls, but the Expand/Collapse gizmo will toggle when the user clicks on the panel in question.
Again, check out the vs2008 toolbox. The Group "headers" are what I am after here. Believe it or not, all of this now WORKS (gee me, look what I did!) EXCEPT the initialization. If I "Handle" the paint event of the SplitCOntainer.Panel1 object in any way which prevents the flickering jmc alludes to above, any redrawing required by either initialization OR hiding/unhiding of the host form is prevented. And it seems like the SplitContainer panel is constantly redraing (probably checking to see if the splitter has been moved).
I can post some code, but it is a little confusing, since I am dealing with some semi-complex interaction here. Also, It is not necssecarily structured well ()yet). AFTER I figured out the drawing bits, THEN I was going to try to do some refactoring and restructuring. Code Follows in next post.
could someone tell me how to fire an event in main thread from another thread as well as fire and forget without use a new thread?
View 9 RepliesI have the following code for a gradient form below. When I step through my code it seems to fire constantly. Does this mean that it fires constantly at run-time? If so, is there a way to stop it from firing constantly
Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim Mybrush As New System.Drawing.Drawing2D.LinearGradientBrush(Me.ClientRectangle, Color.LightSkyBlue, _
Color.Snow, Drawing2D.LinearGradientMode.Vertical)
e.Graphics.FillRectangle(Mybrush, Me.ClientRectangle)
End Sub
How would I draw a line over a Picture Box using the Paint event? I can draw the lines but they are drawn under the Picture Boxes.
View 6 RepliesIn my attempts to understand vb.NET, one of the problems I have encountered is that I have not been able to find a concise definition anywhere for the Paint Event. So after many hours of researching and forum posts (and my own personal tests), here is my own definition (but it seems to fail in one instance, mentioned after the definition). I would like to create a final definition based on everyone's input, but keep in mind, the idea here is to STAY CONCISE. So here goes:
Explanation of the Paint Event
Whenever any portion of a control is UNCOVERED (except by the mouse pointer), the paint event fires. Covering of the control does not fire the event, because the covered area is not visible to the user, and is therefore irrelevant. The paint event is a messenger that alerts the program, via message, that some portion of the control has been uncovered and this message launches an OPTIONAL paint event handler (paint event procedure) written by the programmer, if one is needed to handle those situations when the event occurs. One possible situation is the most obvious...the need to redraw the uncovered region. A paint event procedure is the programmer's counterpart to vb6's automatic property, "AutoRedraw". But whereas vb6's solution was a simple and automatic redraw of the control, vb.NET's equivalent requires the programmer to define explicitly how the event is to be handled, whether it be a simple redraw or something more elaborate. This puts this event in a special category; it is not a user-desired event fired by some user-desired action...it is an internally generated event that acts more as a housekeeping "watchdog" to alert the program that housekeeping chores may have to be implemented because the user did something that was NOT DIRECTLY RELATED to a desired action. For example, when the user moves a window over a control in such a manner that a portion of the control is covered, then uncovered, this causes the state of the control to change even though the user did not specifically request it. It nonetheless may have to be dealt with, and this is managed via the paint event handler procedure.
The problem I have with this definition of mine, is that if the above is true, then why does the mouse moving across the control NOT cause the paint event to fire? After all, it is causing areas of the control to be covered and then uncovered. Is it because the mouse is a special case where the system puts the mouse pointer on a separate layer above the screen graphics, in order to prevent constant paint event messaging?
This is a working example which draws a rectangle on different location every timer_tick and I fully understand now how it's working:
Code:
Dim i, timercount As Integer
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
[code]....
Now I'm looking for a way to draw this rectangles without refreshing them every single tick. I've just started using Visual Basic and I really don't know how to call/raise PictureBox1_Paint event every timer_tick or how to store drawing data in member variables?
I am sure that I have read how to do this but I seem to recall that it is to do with the paint event of a control.
View 4 RepliesI have a panel in my mainform and need to display a jpg file on it using a paint event. Any suggestion how can i go about doing it. I have to use a menu item to open a folder i.e. OpenDiaolgFolder to open a jpg file.
View 6 RepliesI have a Windows form UserControl that receives electrical signal waveform data into a 128 element byte array Property every 1,000 ms.
I would like to have the Paint event draw a a subset of the 128 sample points of the array every
100ms (12-13 graphic.drawline operations) to simulate a rolling waveform display such as one would see on an oscilloscope or a medical monitoring device. Is it possible, and if so, how would I set the paint event handler to fire every 100 ms?
I have a form called BaseReportForm that handles drawing some stuff to in a panel to create a template for a bunch of reports. The drawing all takes place in the Panel's Paint event and this form will always be inherited. In the inherited forms, I draw the specific details of the report in the inherited form's Panel Paint event. So I am drawing to the same panel from the base form and from the inherited form. It all works fine, but when I try to open the design view for the inherited forms, I get the following error..
Quote:
The event Paint is read-only and cannot be changed.
I'm not sure I am handling my paint events correctly. Is there a different way I should be handling the drawing of these reports?
This one is killing me. I don't think this would be so difficult if M$ documentation was to the point and talked in normal speak (I guess they don't understand KISS).it seems unnecessarily difficult to raise a paint event without a picturebox getting redrawn (all existing graphics erased). Invalidate, Refresh and Update all erase the picturebox. All I want to do is get the procedure ( with Handles Picturebox1.paint) to fire so I can draw to it without erasing what is already there. I looked into the RaiseEvent statement but there are a zillion errors that pop up for one reason or another telling me I can't do it. So: 1. How the heck can I get this to work? 2. Does anyone know of a great book on vb.NET that doesn't try to impress anyone with it's command of the English language, but instead teaches. As far as I can tell, M$ is full of themselves in a major way?
View 5 RepliesI've got this code which draws a line and it moves down to a point then two curves are drawn coming off of it. I need to get it to repeat itself after a short period, so there's a constant flow of lines moving down then becoming curves.[code]
View 3 RepliesWith reference to my previous thread on Paint event handler.. [URL] I went to read up more on Paint Event Handler.. I have a button which draw out a path based on the user selection.. Below contains the drawing of the path portion of the button click event code
[Code]...
However It did not activate the paint event when I clicked on the button.. Instead, the paint event still activate even before I click on the button? So can anyone teach me on how to activate the paint event when I click on a button?
I need a multiline TextBox which is always disabled, but it shouldn't paint itself in gray, but I want to keep its designer choosen color. I previously had the same requirement with an always-black Label (no multiline) and so I inherited from Label like:
Imports System.ComponentModel
Public Class LabelDisabled
Inherits Label
Sub New()
InitializeComponent()
Enabled = False
End Sub
[Code] .....
But this way, neither I can set the "real" Enabled property, I mean the backing field.