Posting it here is hardly the same as comparing it. Your enum-declaration is not a UINT, but defaults to INT. I suggest you use the version from the P/Invoke website, preferably with the same name. Below code works;
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
PrivateFunction ShowWindow(ByVal hwnd AsIntPtr, ByVal nCmdShow As WindowShowStyle) AsBooleanEndFunctionPrivateEnum WindowShowStyle : uint
Hide = 0
Show = 5EndEnumSub Main()
Dim p = Process.Start("calc.exe")
Console.WriteLine("Any key to hide")
Console.WriteLine("Any key to show")
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
Dim height As Double'inches
Dim weight As Double 'pounds
Dim name As String
Dim stats As Appearance
Private Sub btnDisplay_Click(...) Handles btnDisplay.Click
Dim personl, person2 As Person
Dim person1 As String = Michael
(missing lines –come from a, b, c, d, & e listed below)
(a) Give person, the name Michael
(b) Set Michael's height and weight to 71 and 190, respectively.
(c) Give person2 the name Jacob.
(d) Set Jacob's height and weight to 70 and 175, respectively.
(e) If one person is both taller and heavier than the other, display a sentence of the form
Does anyone know of a way to throw errors in vb.Net based on the error number? I need to build a list of just that since, as unnbeleivable as it sounds, MS apparently can't provide a table of error codes matched to their descriptions like they did in vb6. If that means they are too numerous to list, then if they can't stand the heat, get out of the kitchen, right?
Anyway, the Throw() method seems to be based on the user providing the error description so that the error can be thrown, and THEN you can query the Err structure to get the corresponding number. But I don't see a way of going in reverse...Providing an error number and having the exception thrown, so you can get at the description.
In that same regard, I could go back and use the error codes from vb6.....IF they matched up with the ones in vb.Net. That's one hell of an assumption!
The exceptions don't really have error numbers. The Err object is a hold over from the VB6 days. It's not used in VB.NET code. It's only there for backwards compatibility in old VB6 projects that were converted to VB.NET.
Well, my predicament is that I am finishing up a port-over of a vb6 project, with old style "On Error Resume and Goto" statements. So I need all possible errors that can be raised at certain spots. And since .net supports backward compatability, then the least they can do is show a table of vb6 error codes vs. descriptions. BUT then again, if this is TRUE backwards compatability, then the code numbers would not have changed. I hate making assumptions like that, though.
Still...Would be nice if they would put some of the old stuff in the net documentation, so you don't have to leave the net IDE to go look for a legacy feature that net supports. In that sense, it really IS part of net...Just not its new framework. I guess I'm just nitpicking.
Again. It has nothing to do with .NET at all. It's legacy junk that's only there for backwards compatibility. It offers nothing to .NET development and why would you duplicate documentation that is already out there and redocument language features that have been unsupported for years now?
It really is NOT part of .NET. What you see in a converted application are methods and hacks that look and work like old VB6 code. It's just a bunch of adaptations cobbled together to make .NET code look and work like old VB6 functionality.
I am having difficulty sorting a custom class based collection on two fields and am wondering if anyone can assist me. I have a class that looks like so:
ClassmyClassprivate ID asStringprivate Name asStringprivate TK asStringprivate Di asStringprivate M asStringEndClass
Using this class i add to a Collection a number of items, e.g.
Private colClass As Collection
Private clsTheClass AsmyClassSet colClass = New Collection
Set clsTheClass = NewmyClass
clsTheClass.Name = "A"
clsTheClass.TKs = "100"
clsTheClass.Di = "5"
clsTheClass.ID = "1"
clsTheClass.M = "9"
What i end up with it is a collection that looks like so after adding all the items:
ID |Name |TK |Di |M
1 A 100592 B 100393 C 10594 D 10795 E 10196 F 400957 F 40045
I need to sort the collection On TK, and then DI. That should make the collection look like this:
ID |Name |TK |Di |M
6 F 400957 F 400451 A 100592 B 100394 D 10793 C 10595 E 1019
I am currently using this method to sort on TK, but i cannot get it to work how i need the output:
PublicSub SortCollection(ColVar As Collection)
Dim oCol As Collection
Dim i AsIntegerDim i2 AsIntegerDim iBefore AsIntegerIfNot (ColVar IsNothing) ThenIf ColVar.Count > 0ThenSet oCol = New Collection
For i = 1To ColVar.Count
If oCol.Count = 0Then
iBefore = 0For i2 = oCol.Count To1Step -1
IfCLng(ColVar(i).TK) < CLng(oCol(i2).TK) Then
iBefore = i2
ElseExitForEndIfNextIf iBefore = 0Then
oCol.Add ColVar(i), , iBefore
EndIfEndIfNext'WE now have it sorted by TK in Asc order so we need to reverse it
'Reverse the collection
Dim MyNewCol AsNew Collection
Dim obj AsObjectForEach obj In oCol
If MyNewCol.Count > 0Then
MyNewCol.Add Item:=obj, before:=1
EndIfNextSet ColVar = MyNewCol
Set oCol = NothingEndIfEndIfEndSub
Anyone got any pointers as to what i need to change in the sort routine?
Whenever I sort, I find the largest, or the least first and set the value to "x". From there I work up, or down assigning to a temp object, collection or array, and replacing "x" as the largest each time.
x = 0
for each item in collection
if item > x then
x = item
This gets the largest to begin.
while tempcollection.count isnot collection.count
for each item in collection
set x if the item is less than the last in tempcollection and is not less than x
That is a level one sort, but you should be able to expand to code easily enough. Sorry that I lack any time, or I would have done it for you!
You could implement the IComparable interface in your class, and then define the CompareTo function. Put your comparison logic in this CompareTo function. Then all you would need to do is call the Sort method on your collection.
Read this article and maybe you'll be able to work around the problem.
Also, setting the WindowState for a form that doesn't exist yet won't work, which has also been mentioned elsewhere.
"The problem with dotnet smartdevice forms is, that using FormState in the Forms constructor has no effect. As the contructor is called, you cannot alter the formstate, you have to use a schedule to set the formstate to Minimized. Or, better, do not use a form at all."
Ignoring the project type does your IDE have the same layout/windows as Figure 3 here?
If you look at the bottom right-hand corner that's where you'll see it.
Sorry I can't find a better example on msdn site, they've taken dowm a lot of the WinCE VB stuff, but using VS2008 doesn't help either. I don't have VS2008 installed right now, but I'll try and sort something out so that I can see what/where the problem lies.
"It's true that hard work never killed anyone. But I figure, why take the chance." - Ronald Reagan
I have an interesting problem (Interesting to me, anyway ).
I have a form loading, and in the process, an RTB is being loaded with a really super long RTF string. In the process, I get the ContextSwitchDeadlock message box. Now, from what I can gather, it seems to be telling me that system requests have not been able to be carried out for at least 60 seconds while the string is being loaded, and the message is telling me that you can't expect to be able to do anything else while that is going on, AND there may be an evergrowing queue of system tasks that have been put off until the string finishes loading. If this is true, I imagine I am getting the message because this is not a case where DoEvents() would be of any help...As the RTB is being loaded with the string, all of that activity is not code that a DoEvents() line can be inserted into.
So I started looking around, and discovered talk about message pumps (message loops), but no great information on them in general. So my question is, is a message pump what I need, and if so, how do I implement such a thing?
Your app already has a message pump. It always runs on the UI thread (startup thread) and it's the little bugger that triggers that message "Not responding" when your code blocks the UI thread and the message pump can't be processed because of it.
The message you're getting is because COM interop happens through the message pump. You app is using a COM-based component (whether you know it or not) and COM message are not being processed because the message pump is prevented from running by your extremely long running operating (the RTF load).
Adding a second message pump isn't going to accompish anything because it also will be blocked.
The good news is that message only appears when running the code under the debugger. Even better, you can disable it in your app.config. See this[^].
THe better solution would be to NOT load such a massive document into the RTB.
I was trying add current date to a textbox in the current control when a user press something like Alt+D. I used an example from this Article: Setting A Global Hot Key I modified the code to something like this:
ProtectedOverridesSub WndProc(ByRef msg As System.Windows.Forms.Message)
'We only care about hotkey messages
'if this is our hotkey and the ActiveControl from the ActiveForm is a textbox, Insert the current date.
IfCShort(msg.WParam) = m_HotkeyID ThenIfTypeOf (Me.ActiveForm.ActiveControl) Is TextBox ThenMe.ActiveForm.ActiveControl.Text = Me.ActiveForm.ActiveControl.Text.Insert(Me.ActiveForm.ActiveControl.Text.Length, DateTime.Now.ToShortDateString)
'move the cursor to end
Dim tb As TextBox
tb = Me.ActiveForm.ActiveControl
EndIfEndIfExitSelectCaseElse'pass it back to main WndProc
All I have to do is to register the hotkey in the main MDI Form. No matter which form I'm at, while typing in the textbox whenever I press hotkey I get the current date.