|
If I put lblPaint.Refresh in the MouseUp event it will erase what I've drawn. I'm not sure what you're talking about. How can I correct my problem
|
|
|
|
|
Yeah, it erases what you've drawn. You code isn't REDRAWING it in the labels Paint event! Your code has to store the coordinates of these lines, somewhere, for each line that is drawn. In the labels paint event, it must redraw all those lines every time there is a WM_PAINT message from windows. You'll get this message many, many times, even if you're not dragging the mouse around drawing new lines. So, yes, you're code has to be prepared to coninuously redraw the lines you've drawn and stored.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I can't think of any other way other than to store each coordinate in an array. But the array would utilize lots of memory after some time would it not? And also performance would not be there.
|
|
|
|
|
You could store it them in an array, or whatever list object you want. Memory use will be minimial since your ownly storing 4 32-bit numbers per line. Performance is not an issue unless you're going to be drawing thousands of lines on this control.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I figured out a way but my RAM is drained and then the garbage collector empties and then it fills back up. Same process over and over.
Are there any examples that demonstrate how to redraw?
|
|
|
|
|
It's not as hard as it seems. It just takes a bit of planning to get it right, but what you do depends heavily on what you want the control to do and look like.
Google for "Control Custom Painting[^]" and you'll come up with all kinds of articles and examples.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I created a program to take a screenshot twice every second. It loads into a picture box as a bitmap. I then have another portion of the application that will allow me to draw (freehand) on a label. I am trying to make the label transparent so I can draw on the label on top of the constantly refreshing picture box.
For some reason, when I draw the label is grayed out. I am using System.Drawing. What am I doing wrong. Some of my drawing code is as follows:
Imports System.Drawing
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Friend WithEvents btnExit As System.Windows.Forms.Button
Friend WithEvents radLine As System.Windows.Forms.RadioButton
Friend WithEvents radBox As System.Windows.Forms.RadioButton
Friend WithEvents radFree As System.Windows.Forms.RadioButton
Friend WithEvents grpDrawTool As System.Windows.Forms.GroupBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents lstColor As System.Windows.Forms.ListBox
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents numWidth As System.Windows.Forms.NumericUpDown
Friend WithEvents TrackBar1 As System.Windows.Forms.TrackBar
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox
Friend WithEvents lblPaint As System.Windows.Forms.Label
Friend WithEvents btnClear As System.Windows.Forms.Button
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.btnExit = New System.Windows.Forms.Button
Me.grpDrawTool = New System.Windows.Forms.GroupBox
Me.radFree = New System.Windows.Forms.RadioButton
Me.radBox = New System.Windows.Forms.RadioButton
Me.radLine = New System.Windows.Forms.RadioButton
Me.Label1 = New System.Windows.Forms.Label
Me.lstColor = New System.Windows.Forms.ListBox
Me.Label2 = New System.Windows.Forms.Label
Me.numWidth = New System.Windows.Forms.NumericUpDown
Me.btnClear = New System.Windows.Forms.Button
Me.TrackBar1 = New System.Windows.Forms.TrackBar
Me.Button1 = New System.Windows.Forms.Button
Me.PictureBox1 = New System.Windows.Forms.PictureBox
Me.lblPaint = New System.Windows.Forms.Label
Me.grpDrawTool.SuspendLayout()
CType(Me.numWidth, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.TrackBar1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'btnExit
'
Me.btnExit.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnExit.Location = New System.Drawing.Point(310, 182)
Me.btnExit.Name = "btnExit"
Me.btnExit.Size = New System.Drawing.Size(50, 23)
Me.btnExit.TabIndex = 1
Me.btnExit.Text = "Exit"
'
'grpDrawTool
'
Me.grpDrawTool.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.grpDrawTool.Controls.Add(Me.radFree)
Me.grpDrawTool.Controls.Add(Me.radBox)
Me.grpDrawTool.Controls.Add(Me.radLine)
Me.grpDrawTool.Location = New System.Drawing.Point(240, 24)
Me.grpDrawTool.Name = "grpDrawTool"
Me.grpDrawTool.Size = New System.Drawing.Size(128, 120)
Me.grpDrawTool.TabIndex = 2
Me.grpDrawTool.TabStop = False
Me.grpDrawTool.Text = "Drawing Tools"
'
'radFree
'
Me.radFree.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.radFree.Location = New System.Drawing.Point(16, 88)
Me.radFree.Name = "radFree"
Me.radFree.Size = New System.Drawing.Size(104, 24)
Me.radFree.TabIndex = 2
Me.radFree.Text = "Freehand"
'
'radBox
'
Me.radBox.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.radBox.Location = New System.Drawing.Point(16, 56)
Me.radBox.Name = "radBox"
Me.radBox.Size = New System.Drawing.Size(104, 24)
Me.radBox.TabIndex = 1
Me.radBox.Text = "Box"
'
'radLine
'
Me.radLine.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.radLine.Checked = True
Me.radLine.Location = New System.Drawing.Point(16, 24)
Me.radLine.Name = "radLine"
Me.radLine.Size = New System.Drawing.Size(104, 24)
Me.radLine.TabIndex = 0
Me.radLine.TabStop = True
Me.radLine.Text = "Line"
'
'Label1
'
Me.Label1.Anchor = System.Windows.Forms.AnchorStyles.Right
Me.Label1.Location = New System.Drawing.Point(253, 150)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(64, 16)
Me.Label1.TabIndex = 4
Me.Label1.Text = "Tool Width"
'
'lstColor
'
Me.lstColor.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.lstColor.Items.AddRange(New Object() {"Black", "Blue", "Green", "Yellow", "Red"})
Me.lstColor.Location = New System.Drawing.Point(248, 224)
Me.lstColor.Name = "lstColor"
Me.lstColor.Size = New System.Drawing.Size(120, 95)
Me.lstColor.TabIndex = 5
'
'Label2
'
Me.Label2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.Label2.Location = New System.Drawing.Point(248, 208)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(80, 16)
Me.Label2.TabIndex = 6
Me.Label2.Text = "Choose Color"
'
'numWidth
'
Me.numWidth.Location = New System.Drawing.Point(320, 150)
Me.numWidth.Maximum = New Decimal(New Integer() {9, 0, 0, 0})
Me.numWidth.Minimum = New Decimal(New Integer() {1, 0, 0, 0})
Me.numWidth.Name = "numWidth"
Me.numWidth.Size = New System.Drawing.Size(32, 20)
Me.numWidth.TabIndex = 7
Me.numWidth.Value = New Decimal(New Integer() {2, 0, 0, 0})
'
'btnClear
'
Me.btnClear.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)
Me.btnClear.BackColor = System.Drawing.SystemColors.Control
Me.btnClear.Location = New System.Drawing.Point(244, 182)
Me.btnClear.Name = "btnClear"
Me.btnClear.Size = New System.Drawing.Size(60, 23)
Me.btnClear.TabIndex = 8
Me.btnClear.Text = "Clear"
Me.btnClear.UseVisualStyleBackColor = False
'
'TrackBar1
'
Me.TrackBar1.Location = New System.Drawing.Point(-3, 319)
Me.TrackBar1.Maximum = 100
Me.TrackBar1.Minimum = 10
Me.TrackBar1.Name = "TrackBar1"
Me.TrackBar1.Size = New System.Drawing.Size(202, 42)
Me.TrackBar1.SmallChange = 5
Me.TrackBar1.TabIndex = 9
Me.TrackBar1.Value = 10
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(251, 325)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(75, 23)
Me.Button1.TabIndex = 10
Me.Button1.Text = "Button1"
Me.Button1.UseVisualStyleBackColor = True
'
'PictureBox1
'
Me.PictureBox1.BackColor = System.Drawing.Color.Transparent
Me.PictureBox1.Location = New System.Drawing.Point(0, 0)
Me.PictureBox1.Name = "PictureBox1"
Me.PictureBox1.Size = New System.Drawing.Size(224, 184)
Me.PictureBox1.TabIndex = 11
Me.PictureBox1.TabStop = False
'
'lblPaint
'
Me.lblPaint.BackColor = System.Drawing.Color.Transparent
Me.lblPaint.Location = New System.Drawing.Point(12, 37)
Me.lblPaint.Name = "lblPaint"
Me.lblPaint.Size = New System.Drawing.Size(208, 224)
Me.lblPaint.TabIndex = 0
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(384, 349)
Me.Controls.Add(Me.lblPaint)
Me.Controls.Add(Me.PictureBox1)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.TrackBar1)
Me.Controls.Add(Me.btnClear)
Me.Controls.Add(Me.numWidth)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.lstColor)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.grpDrawTool)
Me.Controls.Add(Me.btnExit)
Me.MinimumSize = New System.Drawing.Size(392, 376)
Me.Name = "Form1"
Me.Text = "Drawing Program"
Me.grpDrawTool.ResumeLayout(False)
CType(Me.numWidth, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.TrackBar1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
#End Region
Dim startX As Int16
Dim endX As Int16
Dim startY As Int16
Dim endY As Int16
Dim m_Drawing As Boolean
Dim EraserOn As Boolean
Dim MyPen As New Pen(Color.Black)
Private Sub lblPaint_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles lblPaint.Paint
Dim g As Graphics = e.Graphics
Dim A, B, X, Y As Integer
If EraserOn Then
g.Clear(System.Drawing.Color.White)
EraserOn = False
Return
End If
If radLine.Checked = True Then
g.DrawLine(MyPen, New Point(startX, startY), New Point(endX, endY))
ElseIf radBox.Checked = True Then
If (endX - startX) >= 0 Then
A = endX - startX
X = startX
Else
A = startX - endX
X = endX
End If
If (endY - startY) >= 0 Then
B = endY - startY
Y = startY
Else
B = startY - endY
Y = endY
End If
g.DrawRectangle(MyPen, New Rectangle(X, Y, A, B))
End If
End Sub
Private Sub lblPaint_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lblPaint.MouseDown
If radFree.Checked = True Then
m_Drawing = True
End If
startX = e.X
startY = e.Y
End Sub
Private Sub lblPaint_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lblPaint.MouseUp
endX = e.X
endY = e.Y
If m_Drawing = False Then
lblPaint.Refresh()
End If
m_Drawing = False
End Sub
Private Sub lblPaint_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lblPaint.MouseMove
If m_Drawing Then
lblPaint.CreateGraphics().DrawLine(MyPen, startX, startY, e.X, e.Y)
startX = e.X
startY = e.Y
End If
End Sub
lblPaint is the label. It's color property is set to "Web Transparent". radLine, radFree are radio buttons to draw different types of shapes with the mouse.
How can I alter my code to make the label transparent. Or should I approach this using another method?
Thank you!
|
|
|
|
|
If you want anyone to look at your code, just post the code that is relevant to the problem. Most of the code you posted is auto-generated, and most of that is totally irrelevant.
---
b { font-weight: normal; }
|
|
|
|
|
I'm currently working on an application that needs to go to a specific folder and open a file, read it and close it, then go to the next file, read it, then close it. Can someone provide some reading on how I can do this with all the files in the folder and stop when the program reaches the last file. The number of files in the folder is not constant. Thanks.
George
|
|
|
|
|
Your probably looking for <a href="http://msdn2.microsoft.com/en-us/library/07wt70x2.aspx" rel="nofollow">Directory.GetFiles</a>[<a href="http://msdn2.microsoft.com/en-us/library/07wt70x2.aspx" target="_blank" rel="nofollow" title="New Window">^</a>] in the System.Io namespace. GetFiles will return an array of Strings with the filenames of everything in the directory. You just enumerate the collection just like any other.
Imports System.Io
.
.
.
For Each filename As String In Directory.GetFiles(targetDirectory)
' Your code to process the file goes here.
Next
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thanks. I'll give that a try.
George
|
|
|
|
|
Hi! i'm developing an application under VB.NET...while i test it on my computer, everything works fine...but when i try to open it on another computer, an error occurs...the error says something like:
"The application attempted to perform an operation not allowed by the security policy. The operation required the SecurityException.....etc"
Then it says that i should grant the application using the .NET security administration tool...do i have to install this tool on EVERY machine in which i want to run my app??? how do i solve this issue???
thanks!!!
|
|
|
|
|
You're apparently trying to run the app from a network drive/share. Network sources are not trusted and run under greater security control that if the code was launched from a local hard drive.
Yes, you'll have to either:
a) Install the app locally on each machine.
b) Modify the security trusts on each machine to tell it to trust network-sourced code. How you do this depends on your networking environment, but is usually done with policies.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
you're right...i was mapped into a drive and running the app from that drive...now, my new question is...
the app is like a resources monitor, that is, it warns an administrator when, for example, some directory has grown a lot in size, or when the free space of one of it disks is low...etc...
the app runs on a server, and monitors a lot of networked PC's and servers...will i have to install the tool on every monitored pc???? because i think it's not very viable to do that, since there are more than 500 pc's to monitor...
thanks!!
|
|
|
|
|
Like I said, you have two options.
1) Either install it on all the PC's. I hope you have a software distribution system...
or
2) You'll have to modify the security policies to tell the machines to trust network-sourced code.
I suggest you read up on Code Access Security[^], specifically Security Policy Best Practices[^].
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Hi all, im having a little problem with this method, im merging two datasets (same table, im just trying to refresh a table, just in case it has been changed by someone else), and it duplicates rows, i think it must be because of the primary keys, Arent primary keys supossed to be in the dataset since I opened the table?? Here is my code:
*OpenTbl is just a function that returns a datatable
ds1.Tables.Add(OpenTbl("SELECT * FROM Adscripciones", "Adscripciones"))
ds2.Tables.Add(OpenTbl("SELECT * FROM Adscripciones", "Adscripciones"))
ds1.Merge(ds2)
Me.DataGridView1.DataSource = ds1.Tables("Adscripciones")
===========The previous code duplicates rows
ds1.Tables.Add(OpenTbl("SELECT * FROM Adscripciones", "Adscripciones"))
Dim Key(1) As DataColumn
Key(0) = ds1.Tables(0).Columns(0)
ds1.Tables(0).PrimaryKey = Key
ds2.Tables.Add(OpenTbl("SELECT * FROM Adscripciones", "Adscripciones"))
ds1.Merge(ds2)
Me.DataGridView1.DataSource = ds1.Tables("Adscripciones")
==========This wont duplicate, but i have to specify primary keys, and i wouldnt like that since im trying to make a generic routine to open tables.
Is there any way to get primary keys information and use it for the merge method without specifying primary keys??
I hope anyone can help me, Ill apreciate it
Thank You
Alexei
|
|
|
|
|
I forgot to say im using SQL 2000 and VB.NET 2005
|
|
|
|
|
I forgot to say im using SQL 2000 and VB.NET 2005
|
|
|
|
|
I found out how to automatically get primary keys
Anyways, i just wanted to post it here, just in case someone else needs it.
On the dataadapter, just set the da.MissingSchemaAction = MissingSchemaAction.AddWithKey
Example:
==================
Dim ds1, ds2 As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ds1.Tables.Add(OpenTbl("SELECT * FROM Adscripciones", "Adscripciones"))
ds2.Tables.Add(OpenTbl("SELECT * FROM Adscripciones", "Adscripciones"))
ds1.Merge(ds2)
Me.DataGridView1.DataSource = ds1.Tables("Adscripciones")
End Sub
Public Function OpenTbl(ByVal SQL As String, ByVal NombreDeTabla As String) As DataTable
Dim da As New SqlDataAdapter(SQL, conn)
Dim T As New DataTable
Try
'I was missing this line at the beggining
da.MissingSchemaAction = MissingSchemaAction.AddWithKey
da.Fill(T)
T.TableName = NombreDeTabla
Catch ex As Exception
Return Nothing
End Try
Return T
End Function
===========================
Thank anyways
Alexei
Its good to know that theres always someone willing to help others
|
|
|
|
|
Currently, I'm doing a project using VB6. Now, I've create 2 forms, let's say Form1 and Form2. Now, I have done the link between these form. User can click on a button in Form1, then a "pop up" of Form2 is appears. So the user can key in their value here in textbox (in Form2) for example (for other mathematics calculation stuff). The problem here is...HOW I can display what the user "key-in" in the Form2 will be display too in Form1 . Please give the code.
Hopefully to hear from you A.S.A.P, Thank You
Than You
-- modified at 10:21 Wednesday 1st February, 2006
|
|
|
|
|
if I understand what you mean, here's the solution:
make a global variables, 4Ex:
module main
dim objFrm1 as new Frm1
dim objFrm2 as new Frm2
Dim GV_key as string
sub main()
GV_key = objfrm1.key
objfrm2.key= GV_Key
end sub
end Module
Militiaware
Faris Madi
|
|
|
|
|
militiaware wrote: make a global variables
Global variables!!! NO! NO! NO! NO! NOOOO!!!
Jeez, don't they teach that this is bad practice in CS classes any more?
ColinMackay.net
"Man who stand on hill with mouth open will wait long time for roast duck to drop in." -- Confucius
"If a man empties his purse into his head, no man can take it away from him, for an investment in knowledge pays the best interest." -- Joseph E. O'Donnell
|
|
|
|
|
militiaware wrote: make a global variables
:SMACK: That's REALLY bad practice!
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Sorry Faris Madi!
I disagree with you strongly! It is a very bad programing practice to use global variables to pass data between classes (forms). Use events instead!
Supose you have a TextBox on one form and you want to inform the other form whenever it's contents was changed - raise an event with the changed contents as an argumet.
You need to declare the event on the form where the TextBox resides. Then, you need to have a "withevents" variable referencing that form within the second form. Then, attach an event handling procedure on the second form to handle what's need to be done whenever the TextBox's contents changes and the event is raised.
Hope I've helped here.
Walk the way. Top down.
|
|
|
|
|
ohh i forgot this solution completely.....
thanx for the TIP nata.
Militiaware
Faris Madi
|
|
|
|
|