|
Found an initial error (which doesn't seem to change the outcome). The delegate should be defined as:
<UnmanagedFunctionPointer(CallingConvention.StdCall)> Public Delegate Function controlProgressBarDelegate(ByVal progressValue As UInt32, ByVal message As String) As UInt32
perhaps... I mixed 'sub' with 'function' in my previous code. Still does not return to the DLL tho.
Also changed to C++ typedef to:
typedef unsigned int (__stdcall progressCallback)(int progress, const char * p_msg);
K
|
|
|
|
|
Well I'm not completely sure how I solved it, but it works fine now. A key change may have been to change the call from __stdcall to __cdecl - I found a few other silly mistakes, but I think this might have been the important change.
Bye for now, Kurt
|
|
|
|
|
In VB.Net 2005 how can i trap the checked/unchecked state of a datetimepicker through an event. I'm trying to execute two different methods based on the checked/unchecked state of a datetimepicker when the user clicks the datetimepicker. When the user checks the dtPicker Method A is executed, when the user unchecks it Method B is executed. How can i trap it.
Regards.
|
|
|
|
|
The datetimepicker does not have any checkboxes in it that I can see. It does have an event for when it's selected value changes.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
IIRC ancient VB had controls (datetimepicker, textbox, ...) with a built-in checkbox; I guess they invented the Nullable type long before .NET did
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
OK, good to know, but, he says he's using VB2005, does this mean he's not even bothered to create a control in the new IDE and assumes when he does, it will look like the old one ? If so, that would explain it, he's looked at the docs and found an event missing he expects to be there, because he's yet to actually create a control on a form ?
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
One mystery solved: .NET DateTimePicker has a built-in CheckBox too, it is hidden by default, but shows after setting ShowCheckBox true; and it signals trough the same ValueChanged event.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
OK, I did scan the MSDN but didn't see a property for it, then I created a datetimepicker on a form and looked at it to see if it had one.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
.NET DateTimePicker has a built-in CheckBox, it is hidden by default, but shows after setting ShowCheckBox true; and it signals trough the same ValueChanged event.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Well friends, the ValueChanged event only works when u change a datetime value of the control only. The control doesn't fire ValueChaged event when u enable or disable the checkbox in it. Though I managed it somehow by the MouseUp event but yet I want to find out another idea which fires as soon as someone enables or disables the checkbox.
|
|
|
|
|
Hi,
I ran a test using VB2008 before I posted, and the DateTimePicker fired a ValueChanged at every click on the checkbox.
This is the code used:
Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
Console.WriteLine("ValueChanged: " & DateTimePicker1.Checked & " " & DateTimePicker1.Value)
End Sub
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Well Luc, when u check the checkedstate of the datetimepicker in that event then it's easy to trace it. But r u sure when u check/uncheck the control with mouse/keyboard while not changing its value then any event is fired or the respective methods for check/uncheck are executed? If yes then either i am missing something or this feature is not supported in VB2005/C#2005, b'coz i have checked it in my machine and it's not working here as u say. Plz aknowledge further.Regards.
|
|
|
|
|
My system is up-to-date; when I click the checkbox N times the ValueChanged event fires N times.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
I have checked Datetimepicker_valuechanged event. U r right, it is fired everytime the checkbox is checked/unchecked. But a new problem arises from here. Here is the concept I'm trying to work on. Suppose u hav a dtpicker and a listbox on ur form. The listbox contains a list of dates (in dd MMM yyyy format). When u select a date from lstBox it sets that date as the value of the dtPicker. When u uncheck the dtPicker (while not changing its value) it'll set the selectedindex of listbox to -1.
But the problem is, for the 1st time when u select a date from lstbox, the date is set in dtpicker and its checkbox is checked. Right next try to uncheck the dtPicker (without changing its value) u see it's not firing the ValueChanged event and the selectedindex of lstBox is not setting to -1. Plz refer.
|
|
|
|
|
Hey everyone ,
i am working on a custom control,
i was wondering how could i make a property which acts like a list so you could add a list of integers or strings to it through the designer.
for example when you add items to a combobox you got a "..." button near items in the designer and when you click it you can add a list of items through the designer ,
i was wondering how could i achieve that.
thank you for your time.
Net
|
|
|
|
|
For every thing (turn, turn) there is a datatype, and a UITypeEditor for every editing-purpose, under Heaven.
Add a reference to "System.Design" and "System.Drawing.Design".
Imports System.Windows.Forms
Imports System.Drawing.Design
Imports System.ComponentModel
Imports System.ComponentModel.Design
Public Class UserControl1
Private mMyText As String
<Editor(GetType(MultilineStringEditor), GetType(Drawing.Design.UITypeEditor))> _
Public Property MyText() As String
Get
Return mMyText
End Get
Set(ByVal value As String)
mMyText = value
End Set
End Property
End Class
Happy Programming!
I are troll
modified on Sunday, March 15, 2009 8:26 AM
|
|
|
|
|
Hi. a blind programmering student and using the jaws for windows screen reader from http://www.freedomscientific.com. and reading a visual basic programming book chapter 8 about arrays. did read the chapter and do the hands on sample project and got that working. now up to the first exercise and a bit stuck, any one got some sample code i could look at to get an idea of how to do this, to reference elements of a array for each text box, then to print out the contents of each text box in a four collumn report, did read about this, but need some extra help and guidence how to do this. can any one help. you can e-mail me via startrekcafe@gmail.com the book in programming visual basic dot net 2005 by Julia Bradley and Anit Milspaw, magraw hill press. so will paste the project description below. any help would be appreciate, so did start the project, but got stuck. any help would be appreciated. and trying to visualize this in my head, and not able to see, if a bit of a handicap and a pain. so jaws will read everything on the screen, and some one has written scritps to work with visual studio. got visual studio dot net 2005 express. cheers Marvin. 8.1 Array of a structure. Create a project to analyze an income survey. Thestatistics for each home include an identification code, the number ofmembers in the household, the yearly income, and the state of residence.
A menu will contain File, Reports, and Help. The File menu will contain
Enter Data and Exit. As the data are entered, they should be assigned fromthe text boxes to the elements of a structure.
The reports for the project will be sent to the printer and include thefollowing:(a) A four-column report displaying the input data.(b) A listing of the identification number and income for each householdthat exceeds the average income.(c) The percentage of households having incomes below the poverty level.
|
|
|
|
|
StarTrekCafe wrote: you can e-mail me via startrekcafe@gmail.com
That's not wise, people trawl the web for addresses to spam. On the other hand, if you used this address to register your account, you'll get my reply via email anyhow.
I would expect that you want to create a structure, then as the user finishes entering in all the data for an object, the object is created and the values copied across. There's not really any array operations involved in that. If you have an array of objects, that's fine for a learning example, but in the real world you would use a list, because an array is a fixed size, and a list will contain as many objects as you choose to put into it.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
Hi. so can you give me an example, as need to do this for he book. how to reference elements of a array to several text boxes. or maybe can point me to an example. need this for my programming book. let me know asap if you can help. cheers Marvin.
|
|
|
|
|
i given messagebox code here
MessageBox.Show("welcome to trendz", "Classmaster",MessageBoxButtons.YesNo, MessageBoxIcon.Question)
but i want change background color of the messagebox
please give me reply ,how can i change background color of the messagebox ?
|
|
|
|
|
Hi,
AFAIK you can't modify the behavior of MessageBox, InputBox and the like.
If it does not suit you, you will have to make your own, from scratch.
It is not that hard.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Hi All
I wonder if any one can help me figure out (or just plain tell me) how to make changes to an unmanaged struct created by a C++ DLL from VB.NET.
I think I understand how to make a copy of it, and then makes changes to the copy.
The structure in VB (which matches the unmanaged struct created from the C++ DLL) is:
<StructLayout(LayoutKind.Sequential)> _
Public Structure passedStruct
<MarshalAs(UnmanagedType.U4)> Dim IntNumber As UInt32
<MarshalAs(UnmanagedType.U4)> Dim IntAnother As UInt32
<MarshalAs(UnmanagedType.U4)> Dim ptr2Integer As UInt32
End Structure
I call a function in the C++ DLL that creates a version of the struct, populates it, and returns the ptr to it. I can then make a copy just by something like:
Dim receivedStruct As passedStruct = Marshal.PtrToStructure(ptr, GetType(passedStruct))
This works fine and I can even pass the pointer of the copy back to the C++ DLL and have changes made from the DLL.
However, I'd like to do this the other way around to. I would like for the VB.NET application to receive the pointer from the C++ DLL and then make changes directly to the unmanaged version of the struct rather than making a copy of it. In C++ this is pretty easy, for example:
extern "C" __declspec(dllexport) void ChangeStruct(struct MyStruct * pMyStruct)
{
pMyStruct->IntNumber += 23;
}
which just receives the pointer from VB.NET of a structure created in VB.NET and makes changes to it directly. MyStruct is defined as:
struct MyStruct {
unsigned int IntNumber;
unsigned int IntAnother;
unsigned int IntYetAnother;
};
Does anyone know how to do this same thing in VB.NET?
Many thanks indeed for your assistance.
Kurt
|
|
|
|
|
Hi,
I haven't done any interop from VB.NET, but I did a lot of P/Invoke from C#.
I tend not to allocate stuff in the unmanaged world, let the managed world allocate its
own things, then try and have the native world just access those.
This is what I would try, without a single copy, and without Marshal.PtrToStructure:
- allocate the struct in the managed world
- pass it by reference
- in the unmanaged world accept it as a struct pointer, and read and modify at will
- back in the managed world, see how the structs content has changed, without having made a single copy anywhere.
BTW: IMO you can throw away most of the Marshal attributes, you don't need most of them.
e.g. <marshalas(unmanagedtype.u4)> is the default for UInt32
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|
Thanks Luc - that is kinda what I'm doing at the moment, and it works fine. Thanks for pointing out my overcautious useage of <marshallas...> - a good sign that I don't really know what I'm going
It is not clear to me why I really need to be able to change the C++ DLL created struct. The arguement that has been given to me is that the C++ developer does not want to make changes to the C++ library to deal with interacting with VB.NET as he wants it to use the code as is for Linux applications to. He also does not want to have a scenario whereby if the DLL is changed the application would have to be changed. Whereas I argue that I at least have to create a .NET wrapper DLL to use the functions and therefore will have to at least make changes to function names if they are changed - hardly a big bother (esp. as it enables me to work in .NET!).
Anyway, the library is for accessing a custom card on the PCI bus. When I call the function that updates the firmware on the card, it creates an struct that contains the various parameters that are needed to define a particular card. Most of these details come from the system, and only a few from the .NET application. I figured that an easy (although not exactly lean) approach would be to simply include the various card details in the call to the DLL function. However this would mean having a different function for the .NET DLL than as for the Linux DLL - i.e., more work for the C++ developer... apparently. If I'd been writing the control application in C++ then apparently I could easily import the class in the DLL and simply use the 'new' keyword to create new card struct objects. As the DLL is not COM or .NET compatible I don't believe I can do that and hence all this back and forth with the two copies of the struct.
Although I see no issue with the struct being created in the managed world (the .NET app) and then passing the pointer to the unmanaged world (the C++ DLL) (as you suggest), I'd like to be able to do it the other way around if possible... if nothing else it is some knowledge that might prove useful one day.
Many thanks, Kurt
|
|
|
|
|
Hi Kurt,
if you insist on having a native struct manipulated by the managed world without actually copying the data into a managed struct, the only way I can see is by going the unsafe way, with pointers, pointer manipulations, and all the niceties C/C++ offers and the managed languages normally are shielding you from.
In C# that would take an "/unsafe" compiler switch, an unsafe{...} code block,
some pointer (say a int* myIntPointer; ) and from then on it looks and smells very much like C code.
With that kind of code, any time the DLL changes, your wrapper is open for big trouble. I would suggest, if not already present, the DLL offers an int getVersion() returning a new and higher number after each code modification, so you can check for mismatches before dereferencing pointers and digging in struct members.
Luc Pattyn [Forum Guidelines] [My Articles]
- before you ask a question here, search CodeProject, then Google
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get
- use the code block button (PRE tags) to preserve formatting when showing multi-line code snippets
|
|
|
|
|