Custom ToolStripItems Painting - Draw Graphics Without Calling The Refresh Method?
Nov 11, 2011
I have created a custom ToolStripProgressBar. It is basically a class inherited from ToolStripStatusLabel, and i paint the 'progress' bar myself (just a simple rectangle). I have tried creating a custom ToolStripProgressBar using different methods including inheriting from both ProgressBar, ToolStripProgressBar and ToolStripControlHost. I always ran into difficulties doing in this way. Inheriting from ToolStripStatusLabel works well, but with one issue...
In order to have the progress bar update in the statusbar, i have to call StatusStrip.Refresh. Trouble is, adds a huge overhead to the drawing of the progress bar graphics. Simply calling the invalidate method of my ToolStripStatusLabel does not seem to render anything to the screen. how to have my graphics draw without calling the refresh method?
I've been having some trouble with a draw subroutine in a project I'm working on. The last time I did anything like this in VB, drawing on a form was as simple as calling the Line() function, so I'm not clear on a lot of these things. Here's my code:
Code: Private Sub drawBox(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles btnDraw.Click Dim blueBrush As New SolidBrush(Color.Blue) Dim i, j As Integer
[code]....
The code is just meant to draw a grid of small squares across the form, using the centers() array, which is set up elsewhere. My problem is that I can't figure out how to call this sub. If I use Handles Button.Click or Mouse.Move or something like that, VB returns an error saying that Draw and Mouse functions are incompatible. I can't call it normally, because I don't have values for sender and e.
How would I add a new ToolStripItem with code, which will have a Click event which uses the text from the ToolStripItem to read a file? So the ToolStripItem most somehow send it's text to the Click event.
I have started to work some more on my 'shape editor'. If you're not familiar with it,ust imagine the Visual Studio form designer: a 'canvas' (the form) with a bunch of 'shapes' (the controls) that can be selected, moved, resized, etc. I have just finished implementing snapping between shapes and the canvas boundaries. But now I am having some slight issues with painting the snap lines.Just FYI: this is what I mean by snap lines:The blue lines that indicate that the 'buttons' are snapped to each other, and a purple line indicating that button1 is snapped to the boundary.
My shape editor is based loosely on jmcilhinney's 'manipulating GDI+ drawings' codebank entry, and a central idea in that post is to only draw what is necessary. In other words, when I move a shape I could re-draw the entire canvas, but it is much faster and smoother to only re-draw the old and the new location of the shape. Since nothing else has changed, I don't need to draw the rest. So, I simply invalidate the old bounds and the new bounds, and even with a lot of shapes all moving simultaneously it still feels very smooth.
I have a panel that has a BackgroundImage set to "zoom". Because of this, the image usually has some grey "letterboxing" showing the panel beneath the BackgroundImage. I want to paint on the Graphics Object of the Panel using its paint event handler. Is there a way to contrain my painting to just the image part of the panel? Is there a way to find the rectangle that the BackgroundImage is occupying within the panel?
P.S. I don't want to make a graphics object from the BackgroundImage because I'm already using that for some other "paint layers".
I'm looking to draw a trackbar normal, only with a transparent background. I have created a new class that supports transparent backgrounds set to true. Without using userpaint, the trackbar does nothing or takes the color of it's parent. When using userpaint I have to draw the control on mine own. Not quite sure where to start first though...
I've read about drawing a line (not so hard), drawing a floating object (to act as marker), and handling events on when the floating object moves left/right... Drawing 3 separate objects inside an inherited trackbar control seems like a clunky way of calling methods that should exist somewhere? Is there an easier way to draw the control normal without a background? If not, some in starting to implement all 3 new objects working together would be good (I could draw them separately but that's about it).
Well im just upgrading from VB6 and i was able to paint images to the background of a form. The same method does not seem to work in VB 2008. Is there a way i can draw/paint images to the background of my form?
IDE: VB Express 2008Problem: Painting DataGridView Columns.I have done extensive Google searches and found very little on the subject.I have searched this site to no avail.
I'm writing a simple paint program in VB 2008 that allows the user to create rectangles using MouseDown event to anchor one corner, MouseMove to stretch (or grow) the rectangle, then MouseUp event to complete the rectangle.The last statement in the MouseDown event is Me.Invalidate() to trigger the form's paint event where all the rectangles are drawn (refreshed).
I'm tired of looking at the boring default dark gray back of an MdiParent. I tried using Juggalo's Gradient Form and realized that the MdiParent was not being painted, at all. A temporary work around was to create an Image and set it as the background. This is fine and dandy but when I bring the thing to full screen and drag around my MdiChildren forms, the application gets laggy. I have already tried setting the Form to Double Buffered and it doesn't work at all, no noticeable change.I did try editing the Form's Paint() event, but to no avail.Here's the code I'm using to create the image (practically from Juggalo's Gradient Form):
[code]...
Creates the image nice and fast. I want this to happen in the Form's Paint Event though, so I don't have to rely on an Image that causes my program to lag about.
I have inherited the standard panel control to create a panel having custom border color. The problem is, while the panel is on a form and any other form is moved across it, it paints hapazard lines of the same color as the panel custom border color, all throughout background of the panel. I tried to Refresh or Invalidate the panel in its paint event but of no avail. The same is happening while designing in the design editor too. See attached image. Why is this happening and how to get rid of it? My code follows:
I am working on a spreadsheet-like custom control, manually painting all cells according to its bounds and indexes. All is working fine until I populate it to upto a hundred rows (with fixed 6 columns). Basically my sheet expands itself to fit all cells, so to use it properly on a form, I use a panel with autoscroll = true and with my sheet inside. The problem is, the control flickers a lot, which I think is caused by painting ALL of the cells. Is there a way to paint only the visible area.?? So when I scroll down, the control would paint only the visible cells on that area. What I am thinking right now is to not put it in a container, but rather, put a scrollbar in my control. Then that scrollbar would then handle the setting of visible cells, and then my paint event would only paint that visible cells. I am using VB btw, .NET 3.5.. I cant put the code in here cause its separated in different classes(Cell, CellCollection, Rows, Columns, Range, Worksheet, etc.)
So I decided to make my famous tile selector project, but instead of drawing in a form's graphics, do it inside a tabpage.Well, I managed to get it working, but it seems to... flicker.Normally, setting the form's DoubleBuffered property to True would help a lot there, but apparently, the tabpage has no such property.
When I invalidate the tabpage, I draw two images and fill one rectangle.Following past advice, those two images were created before, just once, and are stored in a variable so I don't create them every time I invalidate the tabpage.
I am not sure whether this is a trick question?One of the object i have has 2 boolean properties, Standing and Sitting.I have a class called student with the 2 methods stated below- Am I coorrect is assuming that the first method draw() is affected by the standing property AND not the second method?Also the way it affects is that it draws an image when the the stugent is standing?
When I am loading an Assembly dynamically, then calling a method from it, I appear to be getting the method from Assembly executing before the code in the method that is calling it.It does not appear to be executing in a Serial manner as I would expect. Can anyone shine some light on why this might be happening. Below is some code to illustrate what I am seeing, the code from the some.dll assembly calls a method named PerformLookup. For testing I put a similar MessageBox type output with "PerformLookup Time: " as the text. What I end up seeing is:
First: "PerformLookup Time: 40:842" Second: "initIndex Time: 45:873" Imports System
Let's say I have a page Test.aspx along with test.aspx.vb.Test.aspx.vb contains a class name "TestClass". In that class I have method1(), method2() and method3()I need to be able to call one of those methods, but I can't hard code it, the method to be executed comes from a string.
I can't do Select Case StringContainingTheNameOfTheDesiredMethod Case "Method1"
Running VB/Studio? 2010 on XP. I draw on full screen resolution of 1920 wide x 1080 hi.I have set FormBorderStyle to NONE & WindowState to Maximize which seems to be the only way to get rid of the task bar.but w or wout this setting, My graphics draws a full screen twice - mostly repeatably.When I have [code] parameters set to use 9/16th of screen horizontally, the pattern is drawn once the first time I run it and usually once if I hit F5 quickly enough after hitting Alt-F4. But if I wait long enough [a second or 2] after 'Ready' appears at teh lower left of the IDE screen, then it draws the pattern 3 times.for wider patterns, 10/16th, 11/16 up to 16/16, which is 1920 pixels wide, it usually draws the pattern once after I make this parameter change and twice from there on. The 'twice' is repeatable; it 'doing it once' the first time is not a sure thing.
There are more peculiaraities than this, but if we can find causes for what I"ve given you, it might get them all wout making it seem more complicated than it is.I don't think it's in my code; it works - it draws the right thing the right number of times w no compiler errors. But here is the guts of it:
Public Class Form1 Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
I have a very annoying problem, I am trying to draw an image with the Graphics class but when I do DrawImage, it automatically scales it up! heres some example code
I have a picturebox on my form and I have added a references picture file into my project.
I need to code the Onpaint event handler for the picturebox so that it causes the picture (that i have added) to be drawn but using the picturebox Graphics object.[code]...
I am building a 2D game where the user is a circle(:P) and the enemies are rectangles coming at him. However, my problem is that when I placed a very nice picture of space I found on the internet, the screen draws whatever it has to underneath this image. Everything works,I can still see my lives going down when something collides into me - except the fact it is all covered up by this picture. How Do I Draw everything ON Top of this - (I tried using the 'Send To Back' Command)
EDIT: The form draws everything through a timer, and the user controls his character through keys.In the mybase.load procedure:
PicBackGround.Dock = DockStyle.Fill
PicBackGround is the picture box with the image.In the paint procedure:
Player is a rectangle declared right at the top, Dim Player As New Rectangle(0, 0, 50, 50); There is then the array Objects, which stores all the data about the enemies coming at the player, Current_Projectiles is simply an array to store data about rectangles(bullets) that the player fires.
I have written the below code in my project.Well i am pasting only the piece of code where i am facing the problem.I have written this code with my lot of struggle, but still not getting the accurate image.[code]
The problem I am having is that when I make a Paint sub (I have another form adjacent to the one that I am struggling with), when I move one form over the form that has the graphics, it repaints it. This gives me a different result each time, since when it is on hard the grid changes. I would like to know how to paint in the load sub, so this will not happen anymore.
I'm a unviversity student and for an assignment we have to make a simple project where the user specifies a shape and a color, and then the shape is drawn in some kind of space. So like they choose circle, green, and in this blank space on the form a green circle appears, pretty simple. Anyways we have some kind of msdn alliance thing where we can download Visual Studio for academic purposes, so I downloaded Visual Studio 2008. I spent about an hour going through the tool box trying to figure out what could possibly allow me to draw stuff in it, and I'm really not sure what it could be. On some online tutorials it said something about a function on picture boxes like picturebox.Circle(100,100), 100, vbgreen or something similar, and when I tried making a picturebox and writing this code nothing worked. My friend told me to use a 'canvas' but neither of use know how to actually find such a control (its not in the toolbox).[urls]....
I have a form called frmMain and I created a second instance of the form to display on a second monitor using the code:
Public frmMain2 as new frmMain
I am trying to prevent flickering when I switch between forms by overriding the OnPaintBackground event and drawing a background image in OnPaint. The OnPaint code works great for frmMain, but any time I use an e.Graphics... command it only applies to frmMain and not frmMain2. I'm thinking I either need to have a separate override for the OnPaint event for frmMain 2 or use e.Graphics.to draw on the second monitor, but I don't know how to do either. I have drawn on the second monitor outside of OnPaint by using:
Dim g as Graphics = CreateGraphics() Dim g2 as Graphics = frmMain2.CreateGraphics
Then I use g.DrawImage for frmMain and g2.DrawImage for frmMain2. This does not work inside of OnPaint. I tried it and everything gets drawn on the first monitor.
Is is possible to draw graphics in a console application or is console limited to only text? If possible, where is a guide to the form of the graphics structures.