|
I dont understand what you are saying.
Is ther no simple way to let my project know when the mouse is moving over the listview in my controler?
I cant just use the control event MousMove i realy need the contrler to tel my project what item the mous is hovering abouv in the control.
I dont see why i need to build my own ListView to do this?
if i dident use the control and just have the ListView right in my project, then it works fine. What i need is to pass event to the controller that tels my project that the mous is now hovering abouv post nr 3.
//Jimmy
|
|
|
|
|
If the ListView class doesn't raise the event, then it doesn't raise the event. You're not building your own anyway, you're extending the existing ListView class and handling the notification messages of the List View common control that the ListView class encapsulates. Welcome to the world of component development. The controls in System.Windows.Forms do not expose everything that their underlying Windows common controls are capable of. That's one reason that WndProc is left as virtual for the controls so that you can override it and provide additional functionality. Many developers override ListView to provide additional column sorting, background colors for sorted columns, icons in the column headers, and more. You just need to do this for the tooltip notification message (or rather the message sent to get information for the tooltip).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thanks.. i will look in to it as soon as i can.
But say that an event(MousMove) is evoken at this listView in the control, cant i just throw a new event from this listview event to a control MousMove.
I whant the controls MousMove to be evkoen when then listViews int the control is Evekone
//Jimmy
|
|
|
|
|
One ot the strange things is
A normal MousMove will respond as sone you move the mouse. But when i use the MousMove on this control(compunent) it is only throwing the MousMove when it enters och leaving a control in the control, is this not strange? shold i not throw the MouseMove every litle move i make with the mouse in the control?
//Jimmy
|
|
|
|
|
The message you'd be handling is not the mouse move message. It's the LVN_GETINFOTIP . Take a guess as to what it does. This is closer to the point of your code than handling mouse movements.
If you want to handle the mouse movements in the List View - which do work a little differently inside the recessed client area - then the easiest way to invoke the event handlers is to simply call base.OnMouseMove from your notification message handler with an instance of a MouseEventArgs that you'd have to create and fill-in appropriately.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hey
Thanks for the answare
Do you know where i could find some explination or code ex on this mather?
The Online MSDN was not so explinable.
//JImmy
|
|
|
|
|
But are we realy talking about the same thing?
again: i have got the litview to work with my ownBalloon tip in a simple form, by using the listview event MousMove. in this case i got the listwiev and my own ballon tip(picture box) in same project(form).
Now i want to make a control of the listview, and then i cant have my own Balloon tip in the sam control. This balloontip will be visible in other parts of the form not near the listview, thats way.
when i copy the listView and the code to a control and then make the dll file and then inports it to my project there i got my own made Balloon tip. at this point i need somthing forwarding the listViews MouseMove to the controler, so i can fetch info for the ballon tip in the form.
I thought that i could just use the controlers(with the listview inside) MouseMove and on every Mouse move in this controler get the right item from the listview.
But the MouseMove on the control dont work as the listView MouseMove did.
The ListView MouseMove event was thrown every time the mouse moved with in the listview(thing its the case for every Windowsform control(buttons,picturebox and so on). But the controler is not working this way, its only throwing the MouseMove event when the mose is exiting or entering objects(Buttons,listView ans so on) from the right. Why is it not throwing the MouseMove event for every Mouse move over the controler the way the listView do?
The information that the mouse is hovering abouv is no problem to fetch, the problem is to get the controler to throw MouseMove event every time the mouse is moving abov the control.
I thougt that it would work if i did this:
Creat the funktion to MouseMove for thw listView in the controler.
The in this MouseMove throw a event to the controls MouseMove.
And then i hopt that i just could creat the controls MouseMove(in my project/form not in the control) and that this event would be thrown every time the mouse is moving over the listView in the control.
hope you got my problem better now?
//Jimmy
|
|
|
|
|
I know what your problem is, and I'm saying that you're solving it the wrong way. There is already support for tooltips in the List View common control - even if you don't use the system's provided tool tips (like you seem to be using a balloon tool tip). The idea is to draw upon this behavior rather than trying to hack a solution.
If you really want to use the mouse move events, read about the List View common control at http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/listview/reflist.asp[^]. If .NET isn't raising the MouseMove event for the list client area, you're going to have to make it do so.
Frankly, though, I don't even know why you're not getting MouseMove events when in the ListView . I ran the code successfully below with no problems:
using System;
using System.Windows.Forms;
public class Test : Form
{
static void Main()
{
Application.Run(new Test());
}
public Test()
{
ListView view = new ListView();
this.SuspendLayout();
this.Controls.Add(view);
view.Dock = DockStyle.Fill;
view.MouseMove += new MouseEventHandler(view_MouseMove);
this.Text = "Test";
this.ResumeLayout();
}
private void view_MouseMove(object sender, MouseEventArgs e)
{
Console.WriteLine("{0}, {1}", e.X, e.Y);
}
} I got coordinates the entire time.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
There are some similar examples here on CodeProject. Just search for keywords like "ListView". You can also try googling. It's all a matter of research.
The thing that you'll really need MSDN for - and to make finding message IDs easier, download the core Platform SDK from there - is to find information about Windows messages and those specific to the common controls. Familiarity and experience with Win32 programming will definitely help.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hey!
Thanks for al you help.
I have now manage to fix this problem, but not the way you explained.
This was done: I created a event(lookt in the MSDN how to do) in the controller that reacted on MouseMove over the ListView, and this works fine. A saml problem was that the mouse point wasent sent in the event(didnt know how to do that) so i med a GET funktion instead.
I most say that i realy fill lika a newbie when i read your solutions, thay are not easy to understand.
Best Regards
Jimmy
|
|
|
|
|
First, there is no "controller". I'm guessing you mean "control". The MouseMove event must be handled. Are you saying this entire time that you were NOT actually handling the MouseMove event? I thought you said it wasn't be fired when you moved the mouse from within the ListView ? I'm sorry, but I just don't understand what you're even having problems with.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
hehe..
I Created a "Windows Control Library" in this i created a listView(User List), let us call this "Windows Control Library" by the name "UserControl".
I Created a Windows Application with a form, i added the new control(UserControl) in to the form. Now i wanted the control to respond on any MousMove over the control.
so i created the MouseMove on the control in the form, but it wount react when i was moving over the listview
in the controler, it only reacted when the mouse was moving outside the listView in the UserControl.
So i hade to creat an event in side the UserControl that reacts to MouseMove on the listView.
And then i added the UserControl to my form again and now i could jus my own made event that rects when the mose is Moving over the list View in the UserControl.
Maby i dident make my problem clear enouth, sorry for that
Best Regards
Jimmy
|
|
|
|
|
How do I put this "( ) - " in a textBox lol.....
------------------
I'm naked under my clothes...
|
|
|
|
|
textBox.Text = "( ) - ";
Is that what you mean?
Happy Programming!
WWW::CodeProject::BNEACETP
|
|
|
|
|
It must have been a really long day!
I'm not sure what you are doing, but you have the answer in your question to some degree! A bit harder question would be how to put a "\" in a textbox!
To apply your question to a possible development problem let's display numbers which will be contained in parenthesis and a "-" if the number is negative.
private void SetNumber(TextBox displayArea, decimal balance)
{
displayArea.Text =
balance >= 0 ? balance.ToString() : string.Format("( {0} )-", balance.ToString());
}
_____________________________________________
tagline under construction!
|
|
|
|
|
I have a Windows Form system which has been in development for about a year. In the VS 2000 platform we incorporated a number of System.Diagnostic.Trace.WriteLineIf statements to trace behavior between the client and the remote communication library it connects with. In the production environment then, one can run the app with the /Debug switch fed into it and we can see what is occuring and which model it bombed on.
All worked great and it was becoming a quick selling point to the developers since this tool would become used by both them and the business analysts.
Now comes VS 2003 and a few weeks ago I got my new laptop and my new install of VS 2003. Woohoo. But when I ran into a situation, and wanted to debug it, the dbgView viewer sat quietly.
We ran a very simple test just a few minutes ago:
I constructed a C# console app.
I have my Main issue a Console.Write, a Trace.WriteLine, and a Debug.WriteLine. Only the Console.Write appeared anywhere!!!
Finally....we created a direct hook into the debug writer with DllImport and added that to the list of outputs. Voila, the raw debug writer created the message without problems.
am I going crazy or is there a 1.1 bug that wasn't there in 1.0???
The application test:
using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace Bomb
{
class Class1
{
[DllImport("Kernel32.dll")]
static extern void OutputDebugString(string msg);
[STAThread]
static void Main(string[] args)
{
Console.Out.Write("This is a test");
Trace.WriteLine("This is a test");
Debug.WriteLine("This is a test");
OutputDebugString("This is a freekin test");
Console.Read();
}
}
}
_____________________________________________
Of all the senses I could possibly lose, ..oh the hell with it! This problem is making me loose my sanity.
|
|
|
|
|
This has to do with TraceListener implementations. The DefaultTraceListener is added to Debug.Listeners and Trace.Listeners by default. VS.NET's Output window will show these messages using the DefaultTraceListener , but the Console won't (and never did, unless you had your console set up as a debugging output device for the OutputDebugString API). I'm sure you knew this, but I include it for posterity (since this is a community forum).
Are you running this test application in VS.NET 2003 or in a new instance of the command shell?
Finally, make sure your application actually adds that TraceListener implementation. Perhaps when you recompiled / ported your code to .NET 1.1 some things got misplaced / forgotten?
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Heath,
Heath Stewart wrote:
I'm sure you knew this, but I include it for posterity
Yeh...the Console.Write was just to flag we were entering the code that would generate the trace messages.
After doing more testing we discovered that it is a change in how VS implements the TraceListeners. In VS 2000 -- your trace messages went to the Output window -- but apparently it was also acted as a pass-thru so that such debugging windows as DBGView would see the messages as well.
In VS 2003 the TraceListener deployment traps the trace messages and limits them to only the VS window. As a result, when I look at the viewer window I see no trace messages. However, when I run the executable outside of VS2003 and run DBGView, I see all of my trace messages as expected. (I'm not in the habit of staring at my VS Output window!)
This behaviour was a bit disconcerting since DbgView was the main debugging tool we were using to see debug trace messages coming from our remote component library.
A departure from the normal behaviour, often causes a developer to wonder if this is a bug instead of a feature.
_____________________________________________
Of all the senses I could possibly lose, It is most often the one called 'common' that gets lost the most.
|
|
|
|
|
Actually, I think you mean VS 2002.
Anyway, I looked at the IL for the System.dll assembly and see that the v1.1.4322 of the DefaultTraceListener still uses the OutputDebugString API. I'd be willing to guess that installing VS.NET 2003 somehow screwed up some settings that register DbgView as a valid debugger in Windows.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi,
is there any simple way to set a CPropertySheet's background color? for example to black or anything?
and the other q is how can you do the same with the CTabCtrl?
thx in forward...
|
|
|
|
|
Wrong forum. Try the Visual C++ forum. This is the C# forum - a language targing the CLR, part of the .NET Framework.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi
I am working on building a C# library where I need to read an image (a JPEG disk file) into a string for further manipulation.
The image has been read into the variables as long as I read it into either byte[] or char[]. But When convert the byte[] or char[] into a string ( by appending each byte or char) I have found that most of the non printable characters are converted to some junk.
Can anyone has a solution on reading an Image (binary data) into a string and retain its original data intact.
thanks
AliIMCIn
|
|
|
|
|
You can encode your bytes as Base64. I'm not sure if .net framework has the ability to do that, but you can easily do that.
Here is an article that describes it: http://www.kbcafe.com/articles/HowTo.Base64.pdf
|
|
|
|
|
.net has base64 encoding:
byte[] data = ...;
string jpgData = Convert.ToBase64String(data);
to convert back to bytes
byte[] data = Convert.FromBase64String(jpgData);
|
|
|
|
|
You can also use the ToBase64Transform and FromBase64Transform , which are a little more stream-friendly. These can be found in the System.Security.Cryptography namespace. The Convert class is okay when you're dealing with small buffers, but potentially large buffers like would be required for images you'd want buffer when possible. For instance, when sending data like this across the wire, you could buffer the bytes to a NetworkStream , transforming the byte[] array to base64 and sending that across the wire (also see Encoding to send this transformed byte[] buffer in the encoding of your choice, like UTF-8 for "application/x-www-form-urlencoded" MIME for an HTTP POST).
See the FromBase64Transform constructor in the .NET Framework SDK for an example.
Microsoft MVP, Visual C#
My Articles
|
|
|
|