|
We need a VB.NET FAQ.
The best way is the use a delegate between the two classes, the other way is to have a variable of type Form1 within Form2, and have the only visible constructor take a Form1 instance so it can be set. The other solution is to define an interface which defines the methods that Form2 needs to call on Form1, and have Form1 define the interface, Form2 store an instance of it. Just passing Form1 to Form2 is the ugliest solution, but also the quickest,
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
I want to have a string of the selected install directory, putting this in the AfterInstall method. I need to use the path for doing something with registry but not sure how to get it.
TIA,
Brian
|
|
|
|
|
ok, problem solved,
Right Click installer project, View, Custom Actions
click on the Install method, put /targ="[TARGETDIR]\" into CustomActionData field
and put this into afterinstall method (displays directory in a message box)
<br />
Dim stringD As System.Collections.Specialized.StringDictionary<br />
stringD = Me.Context.Parameters<br />
<br />
Dim enume As System.Collections.IEnumerator<br />
enume = stringD.Values.GetEnumerator()<br />
<br />
Dim directory As String<br />
enume.MoveNext()<br />
directory = enume.Current<br />
System.Windows.Forms.MessageBox.Show(directory)<br />
|
|
|
|
|
Hi All
I have a Microsoft Excel Add-in written in VBA. It includes a function that calls a .dll via a Declare statement along the lines of:
Declare Function SOMEFUNCTION Lib "c:\Program Files\SomeFunction.dll" (ByVal SomeNo as Double) as Double
Instead of including the full path to the Lib file such as "c:\Program Files\SomeFunction.dll", it is possible to register the SomeFunction.dll in the Windows Registry so that I can avoid the fiddly process of finding the path to the file so the Declare Statement becomes:
Declare Function SOMEFUNCTION Lib "SomeFunction.dll" (ByVal SomeNo as Double) as Double
Is that right? How do you register a .dll with Windows Registry? Is the REGEDIT.ex the only way? Is there some other way?
Any suggestions or thoughts on this would be much appreciated.
Thanks
JS
|
|
|
|
|
Well, VBA is a little limited in this respect. You can't register library .DLL's like you can COM .DLL's. Also, you can't change the location of your reference at runtime in VBA, so putting the path to the .DLL in the Registry isn't going to help much.
If you don't want to put the full path to the .DLL in your declaration, you're limited to putting the .DLL where it can be found without it.
The best place to put the .DLL is in the directory your code is launched from, usually in Program Files\myAppFolder. You could also put it in C:\WINDOWS, or more acurately, %SystemRoot%.
If your .DLL is not in the current directory, the loader then tries to find your .DLL in the each folder listed in the PATH environment variable. If it's not found in the PATH, your function call will fail miserably.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Many thanks Dave - That sheds much light - It's a shame that the Program Folder can't be reached as effortlessly as the Windows folder - Thanks again - JGS
|
|
|
|
|
Wanna bet? %ProgramFiles%
Try typing SET at a CMD prompt.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Hello everyone,
I'm having a hard time getting the hang of arrays in VB.Net. I'm trying to use one array to hold other arrays. Trick is, it will not always hold the parent array will not have a static number of child arrays. I'm trying to populate it something like this:
Dim ParentArray as Array<br />
Dim i, x as Integer<br />
<br />
'SQL query gets number of child arrays i want to make and assigns it to x<br />
<br />
for i = 0 to x<br />
ParentArray(i) = MakeChild(i)<br />
next
MakeChild returns and array, and goes a little something like this
Function MakeChild(ByVal QuestionID As Integer)<br />
Dim ansArray As Array<br />
Dim i As Integer<br />
<br />
strSQL = "sql query stuff"<br />
sqlCom = New SqlCommand(strSQL, sqlCon)<br />
drRes = sqlCom.ExecuteReader<br />
While drRes.Read() = True<br />
For i = 0 To drRes.Depth<br />
ansArray(i) = drRes(i)<br />
Next<br />
End While<br />
drRes.Close()<br />
Return ansArray
I keep getting the following error:
Object variable or With block variable not set
Sorry about the longish post. Any help would be greatly appreciated!
-------------------
abort, retry, fail?
|
|
|
|
|
First, you're not using arrays correctly. The following code does not create an array. It merely declares a reference to an Array initialized to Nothing.
Dim ansArray As Array
Arrays are defined like this...
Dim myNumbers(2) As Integer ' Creates an array with 3 elements.
Dim myYears() As Integer = {2000, 2005} ' Initializes a new array with 2 elements.
Looking at your MakeChild() code, you really shouldn't use an array. Arrays have a fixed size, meaning you have to determine how many rows will be returned from the database before you can allocate the array. Or you have to Redim the array on every pass in the loop, which is very inneficient.
Instead, you should use a data structure like the ArrayList which allows you to Add new elements to it. You could then Add the returned ArrayList to the parent's ArrayList.
Now about your error "Object variable or With block variable not set". That sounds like a separate coding error. Double click on the error message to find exactly where in your code this problem is occuring.
-- modified at 19:55 Tuesday 17th January, 2006
|
|
|
|
|
Thanks for your help! I'm pretty new to VB.Net and I guess I've picked up some misconceptions about arrays from some... sloppier languages I've been using for a while. But I changed the arrays to array lists and everything is behaving itself now.
Thanks again!
-------------------
abort, retry, fail?
|
|
|
|
|
Hi everyone,
I try to a display a .txt file in window's textbox or rich textbox. The text file has contents line by line aligned perfectly when using NotePad to view and print it. But when I display this .txt file in textbox or rich textbox the alignment all messed up. Please help me to solve this problem.
Thanks in advance.
nina
|
|
|
|
|
It's all messed up because your using the wrong type of font. In Notepad, you're always using a fixed-width font, like Lucida Console. Every character, and white-space character, is the same width.
By default, in a TextBox and RichTextBox, the font is a proportionally spaced font. Each character and white-space character takes up only as much space as the actual width of the glyphs. A 'W' is much wider than a '.' All you have to do is change the font of the TextBox or RichTextBox to a fixed-width font.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thank you so much.
Nina
|
|
|
|
|
Dave, could you email me pls ?
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Sure. I'll be home in an hour. It's a 50 mile drive to work... YUK!
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I have 2 forms. When I click on a button of form 1 I want to open form 2 and close form1.
The problem comes when form 2 closes when form 1 closes.
One solution will be to define a class and define the forms in it and not in the form 1, but I don't know how to do it.
Someone can help me to do this or give me another solution?
Thank you
|
|
|
|
|
Why are you trying to do this?
Is there a form 0? If so, you can have form 1 send a message to form 0 to open form 2. If there is no form 0, then form 1 is the main form, and when it closes, the application closes. This is why form 2 closes, too.
If you want app 1 to close, try making form 2 a separate app, and execute it from app 1.
Roy.
|
|
|
|
|
hi dear,
i can help u out. create a module . in the module create a main function
module a
sub main()
dim f as new form1
f.showDialog()
end sub
end module
and procedd in the same way as u were doing . the onlu thing u need to change now is ur startup object . set the startup object of the project to sub main and not to any form
(Vinit Jain)
|
|
|
|
|
Thanks to both, but it doesn't work. In 2005 express edition I can't (or don't know) select "sub main" as the startup object.
Roy Heil wrote: Why are you trying to do this?
How you work with multiple forms then without using an mdi environement?
|
|
|
|
|
hi
ok u r working on .net 2005 express edition. i told u the code that would work in .net 2003. for dot net 2005 u dont hv to wory at all . in the properties of the project u have to set the shutdown mode of the application to "when the last form closes"
karan jain
|
|
|
|
|
OK!! this works well!!
There is any inconvenience doing this?
|
|
|
|
|
Does anyone know where I caqn go to get a call to object or library for a list of NT users within a domain?
Bob Zagars
Senior Software Engineer
|
|
|
|
|
I wrote a class in vb.net with the necessary modifications so it can be accessed as COM object from other apps such as VB6.
VB6 can access my class and call all methods with no problems. However, when a VB6 user is debugging his/her code and stops his/her running program, the destructor of my COM class doesn't get called (Sub Finalize). My class already has a Dispose method that takes care of all necessary cleanup; however, this method can be called only when VB6 code is running and if user clicks Stop button my class destructor doesn't get called.
Please advice because only way to do clean up right now is to completely close VB6 app and restart again.
|
|
|
|
|
I want to developed application for automatically detecting Video format .can any one help regrding above problem.Pls do reply on frum or personally mail me .
Thanks & Regards,
Amit More
amit.more@pictureal.net
|
|
|
|
|
that's not too hard, at least how i'm thinking of it.
First get the file name however you plan on getting it - filesystem, URL, etc.
<br />
DIM Filename as String = 'get your filename here<br />
'get the last 3 letters/extension of the filename<br />
DIM Extension as String = Filename.Substring(Filename.Length - 3, 3) <br />
<br />
'check extension against known types<br />
Select Case Extension<br />
Case "wmv"<br />
Response.Write("File type is wmv")<br />
Case "avi"<br />
Response.Write("File type is avi")<br />
'etc etc etc<br />
Case Else<br />
Response.Write("Unrecognized video format.")<br />
End Select<br />
Hope that helps.
-------------------
abort, retry, fail?
|
|
|
|