|
TAlvord@kavlico.com wrote:
How do you add BMPs to a PopupMenu?
You could just inherit from the menuitem class, set the OwnerDraw = True and override the OnDrawItem method?
Public Class MyMenuItem
Inherits System.Windows.Forms.MenuItem
Private mImage As Image
Public Property Image() As Image
Get
Return mImage
End Get
Set(ByVal Value As Image)
mImage = Value
End Set
End Property
Public Sub New()
MyBase.new()
Me.OwnerDraw = True
End Sub
Protected Overrides Sub OnDrawItem(ByVal e As DrawItemEventArgs)
'Draw image and text here
MyBase.OnDrawItem(e)
End Sub
End Class Hope this helps
Tom
|
|
|
|
|
I am new to visual basic and VB.NET. Currently, I am creating a small program that involves switching between forms. I have two forms; the first form is named frmMainScreen and the second form is labled frmDeposit. By clicking a command button on the frmMainScreen form, I want to switch from frmMainScreen to frmDeposit. Does anyone have any idea on how to do this? Thanks
|
|
|
|
|
Ryan Coleman wrote:
I am creating a small program that involves switching between forms
Try this code in your click event button:
Dim frm2nd as frmDeposit<br />
<br />
frm2nd.ShowDialog()
A thousand mile of journey, begin with the first step.
APO-CEDC
Save Children Norway-Cambodia Office
|
|
|
|
|
Hi Ryan,
You should be able to do this as follows...
Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim frm As New frmDeposit
frm.Show()
End Sub
|
|
|
|
|
It worked. Thanks for the help.
|
|
|
|
|
hello guys
i'm on a network, right, so that my application always ask queries to the server. Sometimes connection failed.
i'd like to write a module that allow me to check/test if connection is correct.
i'm using the ADODB.CONNECTION in VB6. i don't know if there's a better way to do it in vb6, so help me to do so, please.
see you.
Sincerely yours.
marc
|
|
|
|
|
This may help.
Set up your Connection in a module and set your connection object as public eg
Public cn As ADODB.Connection.
In a form set up another object to handle the connection object events (adodb objects provide events that you can use but it is not as simple as other objects)eg
Dim WithEvents cnevent As ADODB.Connection
at the form open event use the following to set the event raising object to your connection object:
Set cnevent = cn
Now you will find you have access to several connection events such as WillConnect, ConnectComplete and Disconnect.
If the form you do this in is an MDI parent then connection events in all child forms will be triggered in this form. You can also do the same for ADO recordset objects aswell.
Jon
|
|
|
|
|
I have an app running on an internal server using the following code:
Imports System.Web.Mail
Private Sub EmailError(Optional ByVal sError As String = "Default")
Try
TextBox1.Text += "Emailing Error now." & vbCrLf
TextBox1.Refresh()
Dim oMail As New MailMessage
oMail.To = m_sErrorEmail
oMail.From = "User1@xxxxx.org"
oMail.Subject = "Error Occured in Profile Scoring"
oMail.BodyFormat = MailFormat.Html
oMail.Body = sError
'SmtpMail.SmtpServer.Insert(0, "127.0.0.1")
SmtpMail.Send(oMail)
TextBox1.Text += "Email sent." & vbCrLf
TextBox1.Refresh()
Catch ex As Exception
TextBox1.Text += "Error occurred in EmailError." & vbCrLf
TextBox1.Text += "Stopping process." & vbCrLf
TextBox1.Refresh()
EmailError(ex.ToString())
btnEnd.PerformClick()
End Try
End Sub
The email goes out no problem as long as the To address is outside of the xxxxx.org domain. However, if trying to send to an internal email address (i.e. User2@xxxxx.org) then the email does not arrive. BTW both email accounts are valid in Active Directory.
Any thoughts? This is super simple code. Would love to know what I am doing wrong. I recognize that it may be an exchange or domain security issue but I need some direction. Thanks for your help.
CitizenSoldier
|
|
|
|
|
My VB application is accessing quite a few files, tables, select OCBC queries etc. I've painstakingly checked each and every one to make sure they are closed and set to NOTHING once I've done processing them. I need to add indexes to my tables at the very end of the app.
I've come accross "BackgroundFetch" as a refresh option, because even though the files are closed the app (or maybe my OS) is not seeing them as closed. "BackgroundFetch=No" or "BackgroundFetch=Yes"? Neither fail or cause errors when added to the connection strings. But neither stop the database error either.
Currently I've taken the easy way out and just made the app sleep for a minute before adding the indexes. Does anyone know if I'm using "BackgroundFetch" correctly? Is there another option to force a refresh on these tables that are already closed?
Aubrey
|
|
|
|
|
Hi!
I have a form(constitued my linklabels) that creates other child forms.When i click on one of the form1 elements the "spawnned" child works just fine(creation starts in the event handler). In my application i have an object that has threads that comunicate with the main form by means of an event.When something happens in the thread i raise in it an event and a handler in form1 gets the request.The thing is that when i use the same function to create the new form, it just hangs(after a while the window enters in a NOT RESPOND state!).Any hint on this?Is it because the thread doesn't terminate and the form hangs waiting for the thread to terminate?
|
|
|
|
|
carlos_rocha wrote:
In my application i have an object that has threads that comunicate with the main form by means of an event.When something happens in the thread i raise in it an event and a handler in form1 gets the request.The thing is that when i use the same function to create the new form, it just hangs(after a while the window enters in a NOT RESPOND state!).
In this scenario you should use Control.Invoke() [^] to marshal the execution of the event handler to the thread that owns form1. Multithreaded Windows Forms Control Sample[^] explains why this is necessary (see also Asynchronous Execution in Visual Basic .NET[^] for a well documented code sample).
Best regards
Dennis
|
|
|
|
|
Hi! First of all, thank you for your reply.I'm a bit new to vb.net so i didn't quite understand what you said, or i didnt' explain my problem correctly.I haev the main form, FORM1 that has an object that contains a thread.When something happens in that thread i raise and event to FORM1 and the handler calls a function that creates the form. The sample in msdn is a bit confusing.Where should i use the invoke() method? Directly in FORM1 or in the thread?
|
|
|
|
|
carlos_rocha wrote:
I haev the main form, FORM1 that has an object that contains a thread.When something happens in that thread i raise and event to FORM1 and the handler calls a function that creates the form.
Well, if I understood you correctly you've got an event handler like this which is called in another thread (i.e. other than the thread that owns form1 and most likely runs the standard
application message loop):
Private Sub SomeEventHandler()
someObjVar = New Form2()
someObjVar.Show()
End Sub
The problem is that you're not supposed to do this in any thread. In general only the thread that owns a control (meaning that originally created it) should manipulate it. The easiest way is to create any controls (that includes forms and usercontrols) in the same thread. Therefore you need to make a cross-thread call if you want to do something with your UI from another thread. To find out if the call needs to be marshalled you use the Control.InvokeRequired Property[^] and end up with something like this:
Private Sub SomeEventHandler()
If Me.InvokeRequired Then
Me.Invoke(New appropriateDelegate(AddressOf Me.SomeEventHandler))
Else
someObjVar = New Form2()
someObjVar.Show()
End If
End Sub
I recommend you keep on reading the MSDN articles and references and come back and ask again whenever you don't understand something. Threading is a straining business and if you don't know what your doing you might end up with some strange behaviour (for example if you don't have a good concept for handling exceptions or call some control's methods ).
Best regards
Dennis
|
|
|
|
|
Hi again! ok, i hope u don't get mad at me but...maybe i didn't explain my problem correctly(again). When you say "Well, if I understood you correctly you've got an event handler like this which is called in another thread (i.e. other than the thread that owns form1 and most likely runs the standard" i mean, the event handler is in FORM1 but the event is in another thread.
When you say "Therefore you need to make a cross-thread call if you want to do something with your UI from another thread" do you mean direct manipulations?Because i'm not changig things directly from the other thread, i call the event in that thread so that the handler in the FORM1(that has the control) creates the new form.Shouldn't his work? I'm completly lost :P
|
|
|
|
|
carlos_rocha wrote:
ok, i hope u don't get mad at me but...
No. Not yet.
carlos_rocha wrote:
i mean, the event handler is in FORM1 but the event is in another thread.
Well, at least I think I understood you correctly. Regarding your event handler: an event handler, no matter to which class it belongs, is ultimately nothing else than a piece of code. Let's say you start with thread A. A is your main thread. It creates the application message loop, a form and a second thread B. If this thread B wants to raise an event, it calls the delegates which were registered thru the appropriate event. Accordingly this delegate will be executed in thread B no matter that it was originally registered in thread A. So just because an object was created in thread X does not mean that every call of a method of the particular object will be automatically executed in thread X.
carlos_rocha wrote:
Because i'm not changig things directly from the other thread, i call the event in that thread so that the handler in the FORM1(that has the control) creates the new form.
Yeah, form1 creates the new form, but in the "wrong" thread (as I called it, thread B). So the "wrong" thread will be the owner of the new form instance.
carlos_rocha wrote:
Shouldn't his work?
Counter question: have you already tried to get it to run with Control.Invoke() ?
Best regards
Dennis
|
|
|
|
|
Man, you explained the problem very well!!! i'm sorry, i haven't tried the control.invoke() i will test now.Stay tuned (please)
|
|
|
|
|
Hi! You're the man. Control.Invoke() worked just fine. Before i use it i do a test using InvokeRequired(), if it gives out true it's because i'm not on the thread that initially created the form, so i call invoke().
Thank you very much.
|
|
|
|
|
Hi,
I was wondering if someone could tell me how to add an icon overlay to selected files? I was hoping I would be able to reference it such as...
SetIconOverlay("MyFile.txt", "myOverlay.ico") ' to set the overlay icon.
GetIconOverlay("MyFile.txt") ' to get the overlay icon.
RemIconOverlay("MyFile.txt") ' to remove the overlay icon.
Thank,
|
|
|
|
|
Hi Again,
Can anyone help please?
Thanks,
|
|
|
|
|
I am creating a control and would like to include a property which would act similar to the font property. I have succeeding in getting the ellipsis and '+' sign in the property area, and the custom editor works fine as a single user defined type.
When I try to make the property an array, I get syntax errors and can't get past defining the property as an array.
Does anyone have code where they developed a property similar to the font property (an array of user defined types using a custom editor)?
Thanks
|
|
|
|
|
I think I know the answer to your question and there a few steps you need to take. First is to create a class for a type converter. This is a generic type converter to support my custom controls forming custom textbox, panel and label controls that inherit from a base class called DHObjects.
<br />
Public Class DHTypeConverter<br />
Inherits TypeConverter<br />
<br />
Public Overloads Overrides Function GetPropertiesSupported(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean<br />
Return True<br />
End Function<br />
<br />
Public Overloads Overrides Function GetProperties(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal value As Object, ByVal attributes() As System.Attribute) As System.ComponentModel.PropertyDescriptorCollection<br />
Return TypeDescriptor.GetProperties(GetType(DHObject))<br />
<br />
End Function<br />
End Class<br />
NEXT is to create your class of controls and then add your custom control to a class or usercontrol in the form of a property and add the attibutes that tell the property grid how to handle your custom type:
<br />
<TypeConverter(GetType(DHTypeConverter)), _<br />
DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _<br />
Property MoveBackButton() As DHButton<br />
Get<br />
Return m_MoveBackButton<br />
End Get<br />
Set(ByVal Value As DHButton)<br />
m_MoveBackButton = Value<br />
End Set<br />
End Property<br />
|
|
|
|
|
I have the typeconverter/class properties already included in my class, which works well until I try to make the property an array of user defined types (like the font property with multiple fonts, each font containing it's own set of properties).
|
|
|
|
|
Your question may be over my head. Maybe you should post the errors you are receiving. See if this helps though. This property presents an array of user types in the property grid. Of couse you would need a custom type converter to pretty it up.
<br />
Dim m_foobar() As Foobar = {New Foobar, New Foobar}<br />
<br />
Property MyFooBar() As Foobar() '<--Notice the bracktes<br />
Get<br />
Return m_foobar<br />
End Get<br />
Set(ByVal Value As Foobar())<br />
m_foobar = Value<br />
End Set<br />
End Property<br />
<br />
Public Class Foobar<br />
<br />
Dim m_Foo As TextBox<br />
<br />
Property FooTextBox() As TextBox<br />
Get<br />
Return m_Foo<br />
End Get<br />
Set(ByVal Value As TextBox)<br />
m_Foo = Value<br />
End Set<br />
End Property<br />
<br />
Overrides Function ToString() As String<br />
Return "(FooBar)"<br />
End Function<br />
|
|
|
|
|
Here i want to programattically use symantec antivirus and get notified when the scaning is over .For that i used a command line utility from symantec.com VPSCAN.exe.I created the process using createprocess api ie i supplied the path of VPSCAN.exe along with the files to scan,and i m waiting for the scan to complete usig waitforsingleobject api.But as soon as i execute program the tool starts and exits but scaning is going behind by SYmantec AV ver 8.0 ,so my problem is that how should i figure out when that scan is complete??? Pls help me out
S/W engineer
Hewlett-Packard
Bangalore
|
|
|
|
|
singhrajendra wrote:
For that i used a command line utility from symantec.com VPSCAN.exe.I created the process using createprocess api ie i supplied the path of VPSCAN.exe along with the files to scan,and i m waiting for the scan to complete usig waitforsingleobject api.
Sorry, I don't really get it. Do you want to re-write it in VB.NET or are you trying to use the Win32 API and you can't get it to work? In that case it would also help if you'd provide some excerpts from the source code you're using.
Best regards
Dennis
|
|
|
|