|
Well i'll try this again;
I have created an array containing 7 randomly generated numbers. I want these numbers to be mutually exclusive i.e. same value only occur once.
I have tried to in VB.net programming develop a set of nested if..then statements to test each drawn number against each element in the array.
This process is fraught with difficulty and more often than not does not guarantee a list of exclusive numbers and duplicates do occur. Plus it takes 50 lines of code. Resource intensive!
Is there a more efficient code in VB.net that will validate the content of my array and ensure it is mutually exclusive.
Thank you for the help so far
J.Gallagher
Western Connect
J.Gallagher
Western Connect
|
|
|
|
|
Use a collection instead of an array. Collection keys are required to be unique.
Generate random numbers in a loop until the collection count = 7.
Add the items to the collection using the number.ToString as the key and trap the error that occurs if the item already exists and ignore it and continue the loop.
i.e.
Do While colNumbers.Count < 7
intNew = GetYourRandomNumber()
Try
colNumbers.Add(intNew, intNew.ToString)
Catch
End Try
Loop
Crude but simple.
Robert
|
|
|
|
|
Damn... beat me to it...
George Carlin wrote:
"Don't sweat the petty things, and don't pet the sweaty things."
Jörgen Sigvardsson wrote:
If the physicists find a universal theory describing the laws of universe, I'm sure the a**hole constant will be an integral part of that theory.
My Blog[^]
|
|
|
|
|
Just to keep it easy...
- Run a while loop that tracks the number of entries in a hashtable. Stop looping when you have 7 entries in thre hashtable
- Create a random number.
- Try to add that number to the hashtable as a key.
- If the key you add already has an entry then you catch the exception and go back for another number.
George Carlin wrote:
"Don't sweat the petty things, and don't pet the sweaty things."
Jörgen Sigvardsson wrote:
If the physicists find a universal theory describing the laws of universe, I'm sure the a**hole constant will be an integral part of that theory.
My Blog[^]
|
|
|
|
|
jarlath wrote:
This process is fraught with difficulty and more often than not does not guarantee a list of exclusive numbers and duplicates do occur. Plus it takes 50 lines of code. Resource intensive!
How did you manage to write 50 lines of code just to generate 7 unique random numbers ? That's gotta be some sort of record.
The easiest way to do it is to use a set, if .NET supports them. Then you just keep adding until the count = 7.
According to this:
http://www.codeproject.com/csharp/sets.asp[^]
sets are not supported. The althernative is to create an object, and use it with a map ( hashtable ), using your numbers as keys. Then check for the keys collection to be equal to 7.
Christian
I have several lifelong friends that are New Yorkers but I have always gravitated toward the weirdo's. - Richard Stringer
|
|
|
|
|
I made a notepad with vb.net and I added a fontdialog in it. When i save a text file with some different font types, when I open that file the font will come again courior (default font). The extension is .txt! Why is this?? (
Adrian De Battista
|
|
|
|
|
How are you saving the file?
Just because you add a font dialog and select fonts does not mean that you are preserving that data when you save the file.
What control are you using as the text area on the form? If it is hust a text box then you are not going to get what you want.
Take a look at the rich textbox control.
Paul Watson wrote:
"At the end of the day it is what you produce that counts, not how many doctorates you have on the wall."
George Carlin wrote:
"Don't sweat the petty things, and don't pet the sweaty things."
Jörgen Sigvardsson wrote:
If the physicists find a universal theory describing the laws of universe, I'm sure the a**hole constant will be an integral part of that theory.
|
|
|
|
|
I am using the Rich Textbox. But it doesn't open it as I save it!
|
|
|
|
|
How are you saving the file?
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
I am sending my vb.net project (program) to my friend via email. I am zipping all the files that the vb.net produce when making this program such as bin, obj, forms etc...! When he double click the exe the program doesn't open and an error always pop up. Why is this? What is the problem?? (
Adrian De Battista
|
|
|
|
|
Does he have the same version of the NET Framework installed that the exe was compiled with?
|
|
|
|
|
Does the person getting your exe have the .NET framework installed?
They need that installed to run ANY .NET application.
The error test would be nice to see also...
Paul Watson wrote:
"At the end of the day it is what you produce that counts, not how many doctorates you have on the wall."
George Carlin wrote:
"Don't sweat the petty things, and don't pet the sweaty things."
Jörgen Sigvardsson wrote:
If the physicists find a universal theory describing the laws of universe, I'm sure the a**hole constant will be an integral part of that theory.
|
|
|
|
|
Why is it everyone always says "I get an error", or something similar. WHAT'S THE ERROR?! How on earth does anyone expect an answer to the question "Why?" when all the information they give is "It's broke..."?
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
My friend doesn't have the vb.net installed to his pc. Either the .net framework i think because the .net framework comes witht the vb.net packet. What if, I make a program to someone and he doesn't have the .net framework. what can i do?
|
|
|
|
|
Nothing. If he doesn't have the .NET Framework installed, which you can get from Windows Update, or download from Microsoft here for v1.1[^], then he can't run your app at all.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Hi,
I have a user control which I am puting a TreeView control onto. I have started to add code to the code-behind to populate the TreeView but am getting real problems. Origonally I had the TreeView working fine on it's own on a form, but wanted to make this more generic so I could use it on many other forms.
The error I am getting is "Object reference not set to an instance of an object", which normally means that something needs to be defined as "new", but I am getting this when I drop the user control on the form.
The code in the user control is as follows:
Public Class ProductSpecItems<br />
Inherits System.Windows.Forms.UserControl<br />
<br />
Private Sub ProductSpecItems_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br />
Me.treeProductSpecifications.Nodes.Clear()<br />
Me.treeProductSpecifications.Nodes.Add(New TreeNode("Product Specifications"))<br />
Dim tNode As New TreeNode<br />
tNode = Me.treeProductSpecifications.Nodes(0)<br />
<br />
PopulateTreeView(0, tNode)<br />
tNode.Expand()<br />
End Sub<br />
<br />
Private Sub PopulateTreeView(ByVal inParentID As Integer, ByRef inTreeNode As TreeNode)<br />
'populate the Product Specifications Tree view<br />
Dim ParentTable As New DataTable<br />
Dim ParentRow As DataRow<br />
<br />
Dim sSQL As String<br />
<br />
sSQL = "SELECT ID, DESCRIPTION, PARENTID FROM PRODUCTSPECIFICATIONITEM WHERE PARENTID=" & inParentID & " ORDER BY DESCRIPTION"<br />
ParentTable = SCDatabase1.getDataTable(sSQL) '<----- IT FAILS ON THIS LINE
End Sub<br />
End Class
From the above code I have indicated which line it's falling over on.
I have a global class which defines the Database connection as
Public SCDatabase As New Database(StockControlConnectionString)
so I always have it available. I don't know if this is the best way but it works for everything else I have done.
Can someone help me with this as it's driving me mad. I can not understand why I am getting the error when dropping the user control on the form?
Many thanks for the help.
Shawn
|
|
|
|
|
I have had cases like this where I was not paying attention tot he order that things take when a component (or a form) initializes.
One big thing to remember is that when your control is dropped onto a form it get initialized so there is a moment where things that you think are 'on' the component have not been created yet.
Where are you calling this code from?
Paul Watson wrote:
"At the end of the day it is what you produce that counts, not how many doctorates you have on the wall."
George Carlin wrote:
"Don't sweat the petty things, and don't pet the sweaty things."
Jörgen Sigvardsson wrote:
If the physicists find a universal theory describing the laws of universe, I'm sure the a**hole constant will be an integral part of that theory.
|
|
|
|
|
Hi Ray,
Thanks for the quick reply. I think I understand what you mean, although, how would I get over the fact that the database connection etc has not been initialised?
The code that I have pasted above is on the user control.
The global/public database connection is in a seperate class.
Regards
Shawn
|
|
|
|
|
The control should either be handling it's own connection to the database, or the control should not be handling the connection at all. The best, most generic, way to do it is if the control is NOT handling any database connections. This should be provided by the parent application. The control should be passed a DataSet that it parses and fills the tree with.
Remember what your controls job is and keep it simple. If you add the connection database code to the control, your control will forever be tied to that database. If you have it just handle a passed in DataSet, then the data can come from anywhere, so long as the parent application passes it in in the format that the control expects and can handle.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
ah right. Thank you. I think I have got the understanding of it now! I done a lot of code in VB6 so still getting to grips with .net
I will give your suggestions a go. I certainly understand what you are saying. I can see the logic in it now.
Thanks again
Shawn
|
|
|
|
|
I'm trying to use a dataset created in one form in another but:
Public Shared DataSetleadsONm1 As DataSet
Dim dsr1 As DataRow
Private Sub frmjobs2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For Each dsr1 In DataSetleadsONm1.Tables("PRODLEADS").Rows
dosn't work
any help would be apreciated
ray foucher
|
|
|
|
|
You need to create an instance of the forms on each form before they can communicate
ex:
on form2
Public OldFrm As Form1
on form1
Dim NewFrm As New Form2<br />
Form2.OldFrm = Me
You need to do the second form first else it wont be recognized
Then you can call objets like this
on form1
NewFrm.MyDataset.MyTable("").Rows
Hope this helps
For every action there is an oposite and equal malfunction.
|
|
|
|
|
I believe that if you create the dataset in a module then you should be able to access it from any form you create in your project.
|
|
|
|
|
I'm using this code to play a wav file;
Public Shared Sub PlayWaveResource(ByVal WaveResourceName As String)<br />
<br />
' get the resource into a stream<br />
Dim resourceStream As Stream<br />
resourceStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("AssemblyName." + WaveResourceName)<br />
If resourceStream Is Nothing Then Exit Sub<br />
<br />
' bring stream into a byte array<br />
Dim wavData As Byte()<br />
ReDim wavData(CInt(resourceStream.Length))<br />
resourceStream.Read(wavData, 0, CInt(resourceStream.Length))<br />
<br />
' play the resource<br />
PlaySound(wavData, 0, SND_ASYNC)<br />
End Sub
but it's not playing the right sound, it plays the standard windows error sound instead
any ideas?
For every action there is an equal and opposite malfunction
|
|
|
|
|
i have been trying to upgrade the VB6 project that can be
found at
http://www.vbaccelerator.com/home/VB/Code/vbMedia/Audio/WAV_File_Viewer/article.asp
I have managed to get the majority done, using a combination of the upgrade
facility and some programming of my own. I have now unfortantly got stuck
with the following line of code:
copymemory(VarPtrArray(iWav), VarPtr(tSA), 4)
(copymemory being the standard API call to RtlMOveMemory in kernel32)
The problem i have is the VarPtr command, and to some extent the VarPtrArray
command. I need a solution for VBnet.
Background information:
tSA is variable of the following structure:
StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi) _<br />
Private Structure SAFEARRAYBOUND<br />
Dim cElements As Integer<br />
Dim lLbound As Integer<br />
End Structure<br />
<br />
StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi) _<br />
Private Structure SAFEARRAY2D<br />
Dim cDims As Short<br />
Dim fFeatures As Short<br />
Dim cbElements As Integer<br />
Dim cLocks As Integer<br />
Dim pvData As Integer<br />
VBFixedArray(1) Dim BoundsR() As SAFEARRAYBOUND<br />
Public Sub Init()<br />
ReDim BoundsR(1)<br />
End Sub<br />
End Structure
and is created just before the copymemory line by
Dim tSA As SAFEARRAY2D<br />
tSA.Init()
and propulated with
With tSA<br />
.cbElements = 2<br />
.cDims = 2<br />
.BoundsR(0).lLbound = 0<br />
.BoundsR(0).cElements = m_cWAVRead.ReadbufferSize<br />
.BoundsR(1).lLbound = 0<br />
.BoundsR(1).cElements = 2<br />
End With
iwav is created in the following method
Dim iWav() As Short
If you need any more information please email me at
adrian.game@nospamWarwick.ac.uk (please remove the nospam)
or reply to the post. I have both the orignal VB6 project, the VBnet project
created using the upgrade wizard and my
own semi working version.
Thanks for any help provide
Adrian
|
|
|
|