|
You should be able to just use javascript: window.print();
Michael Flanakin
Web Log
|
|
|
|
|
I am trying to load text into a CheckBoxList ASP.NET Web control and preserve all ASCII chars (incl. successive blanks). Someone suggested that I replace the blanks in my strings with " ". It worked fine, except for some reason one of the lines is broken
i.e.
1.32 -
20.65
There is nothing visible in the HTML displace by "Show Source" in the IE browser to account for the break between the "-" and the "2" ASCII chars. There are many lines the the output preceding and followin that do not break.
Gary Hyslop
|
|
|
|
|
Possibly, the control isn't wide enough to render the text as a single line and the HTML rendering engine is doing word-wrap to display the text on two lines.....?
RageInTheMachine9532
|
|
|
|
|
Output as many times as necessary. This is an entity reference for a non-breaking space and won't be trimmed by the control like the space character would.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I have a problem with focus on an C# MDI Child form; On a double-click listview event, I call legacy C++ DLL that opens a dialog box. I needed to click once to get focus on the dialog and then the second click would activate any button etc.
Okay, to fix that, I changed the doubleclick event to a mousedown, and now when I open the C++ dialog it is fine.
Great, but when I close that dialog and return to the MDI, the focus problem is in C#; I have to first click anywhere on the form to get focus before buttons work properly.
Does anyone know how I can eliminate this problem? - many thanks
Paul.
|
|
|
|
|
I have since discovered that the form is in focus but the mouse movements are not recognized. I created a label on the form to display mouse coordinates on the mousemove event. When I return from the C++ DLL, the mouse is not recognized until I click somewhere on the form.
|
|
|
|
|
How is it possible to change the position and size of the client region of a form ? I have built my personal form inheriting from Form, but need to position the client region accordingly...
Thanx
Forak
|
|
|
|
|
I've just solved this problem myself with a custom control instead of a form. To change the client area you need to override the WndProc method and listen for the WM_NCCALCSIZE message. If you want to do some painting in the non-client area you need to listen for WM_NCPAINT. Here's my solution:
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
enum WM_MESSAGE
{
WM_NCCALCSIZE = 131,
WM_NCPAINT = 133,
WM_NCHITTEST = 132,
WM_NCLBUTTONDOWN = 161,
}
enum WM_NCCALCSIZE
{
WVR_ALIGNTOP = 16,
WVR_ALIGNLEFT = 32,
WVR_ALIGNBOTTOM = 64,
WVR_ALIGNRIGHT = 128,
WVR_HREDRAW = 256,
WVR_VREDRAW = 512,
WVR_REDRAW = (WVR_HREDRAW | WVR_VREDRAW),
WVR_VALIDRECTS = 1024
}
[StructLayout(LayoutKind.Sequential)]
struct NCCALCSIZE_PARAMS
{
public RECT rgrc0, rgrc1, rgrc2;
public IntPtr lppos;
}
[StructLayout(LayoutKind.Sequential)]
struct WINDOWPOS
{
public IntPtr hwnd;
public IntPtr hwndInsertAfter;
public int x, y;
public int cx, cy;
public int flags;
}
[DllImport("User32.dll")]
private extern static IntPtr GetWindowDC( IntPtr hWnd );
[DllImport("User32.dll")]
private extern static int ReleaseDC( IntPtr hWnd, IntPtr hDC );
[DllImport("User32.dll")]
public static extern int RedrawWindow(IntPtr hwnd, IntPtr lprcUpdate, IntPtr hrgnUpdate, int fuRedraw);
protected override void WndProc(ref Message m)
{
switch ( m.Msg )
{
case (int)WM_MESSAGE.WM_NCCALCSIZE :
if ( m.WParam == IntPtr.Zero )
{
RECT rect = (RECT) Marshal.PtrToStructure(m.LParam, typeof(RECT));
rect.Left += 1;
rect.Top += 5;
rect.Right -= 1;
rect.Bottom -= 1;
Marshal.StructureToPtr(rect, m.LParam, false);
}
else
{
NCCALCSIZE_PARAMS csp = (NCCALCSIZE_PARAMS)Marshal.PtrToStructure(m.LParam, typeof(NCCALCSIZE_PARAMS));
csp.rgrc0.Left += 1;
csp.rgrc0.Top += 5;
csp.rgrc0.Right -= 1;
csp.rgrc0.Bottom -= 1;
Marshal.StructureToPtr(csp, m.LParam, false);
}
break;
case (int)WM_MESSAGE.WM_NCPAINT :
{
IntPtr hDC = GetWindowDC( m.HWnd );
Graphics g = Graphics.FromHdc( hDC );
...
ReleaseDC( m.HWnd, hDC );
}
break;
}
base.WndProc (ref m);
}
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
}
Refer to the SDK docs here[^] for more information on what WM_NCCALCSIZE actually does.
Hope this helps.
"I think I speak on behalf of everyone here when I say huh?" - Buffy
|
|
|
|
|
I've been searching for a tutorial that explains how to make alpha bitmaps in C# with DirectX, with no luck. I'd really like to know how the settings in SurfaceCaps and SurfaceDescription must be manipulated to allow me to use, say, a PNG file. Any help is much appreciated.
|
|
|
|
|
Well you say DirectX, but do you mean DirectDraw or Direct3D?
I can tell you as a matter of fact that you will get no alpha-blending of any sort with DirectDraw. There are some hacks you can do to sidestep into other technologies (GDI+ for instance) and back, but this resulted in about a 93% performance degridation when done on every frame.
Our solution is to recode our entire graphics engine using D3D sprites instead of DD.
Hope that helps.
-Hiro_Antagonist
|
|
|
|
|
I did mean DirectDraw, in fact. Hm...sounds like I should learn some Direct3D. Thanks.
|
|
|
|
|
The SelectSingleNode function returns a "System.Xml.XmlNode" object, while the ReadNode function expects something else. You'll need to take a look at the documentation to see if you can either use something different to get the job done, or to see if there is a way to translate the result of SelectSingleNode into something that ReadNode can accept.
This is one of those situations that is best handled by reading the documentation. Either use the MSDN library on your computer, or head here[^].
John
"You said a whole sentence with no words in it, and I understood you!" -- my wife as she cries about slowly becoming a geek.
|
|
|
|
|
Hi,
I have little experience writing code, so your help is much needed, and will be really appreciated....please help!!
I need to build a CONSOLE application, written in C#, It should cycle thru the states as shown:
Stop -> Prepare to Go,
Prepare to Go -> Go,
Go -> Prepare to Stop.
Thanks...in advance
__________________________________________
This is what I have come up with till now, but it seems wrong:
using System;
namespace traffic_light
{
///
/// Summary description for Class1.
///
enum State
{
prepare_to_go,
go,
prepare_to_stop,
stop,
}
class Class1
{
private State _state;
public Class1()
{
_state = State.prepare_to_go;
Console.WriteLine ( _state );
_state = State.go;
Console.WriteLine ( _state );
_state = State.prepare_to_stop;
Console.WriteLine ( _state );
_state = State.stop;
Console.WriteLine ( _state );
}
}
}
|
|
|
|
|
You're not too far away. Since you're obviously trying to learn something new, I'll provide leading questions rather than actual answers.
1) How many times is it supposed to cycle through these states?
2) How would you write code to do something that many times?
3) Does the code you have successfully perform one complete state change cycle?
4) (Less important) Would a separate class method (not the constructor) be a better place to do this work?
John
"You said a whole sentence with no words in it, and I understood you!" -- my wife as she cries about slowly becoming a geek.
|
|
|
|
|
Hi,
Thanks for your assistance, John.
It is meant to cycle through these states continuosly...lets say about 5 times. Its meant to pause at each state for a certain amount of time, say about 5 seconds on each state.
Could you give me some pointers in sorting this out.
Also the code posted above does not run, because during compilation I get this error:
"ConsoleApplication1.exe" does not have an entry point defined.
Thanks alot for your help...much appreciated!!
|
|
|
|
|
Here is one simple way to loop 5 times and pause for 5 seconds each time. Hope this gets you going in the right direction.
for(int i = 0; i < 5;i++)
{
System.Thread.Sleep(5000);
}
- Nick Parker My Blog
|
|
|
|
|
The error I receive when I run the above piece of code is:
'ConsoleApplication1.exe' does not have an entry point defined.
I don't know hopw to rectify the above problem, please help!!
Thanks...
|
|
|
|
|
You must have a Main method in your class:
public static void Main ()
{
// put your code here!
}
Q:What does the derived class in C# tell to it's parent?
A:All your base are belong to us!
|
|
|
|
|
hi, here is everything u need
i hope it helps u!
<br />
using System;<br />
using System.Threading;
<br />
namespace ConsoleApplication1<br />
{<br />
class Class<br />
{<br />
static void Main()<br />
{<br />
Traffic_light t_l = new Traffic_light();<br />
<br />
for(int i = 0; i < 10; i ++)<br />
{<br />
t_l.ShowState();
Thread.Sleep(5000);
}<br />
Console.WriteLine("press enter to exit");<br />
Console.ReadLine();<br />
}<br />
}<br />
<br />
class Traffic_light<br />
{<br />
private string[] Array;<br />
<br />
private int State;<br />
<br />
public Traffic_light()<br />
{<br />
State = 0;<br />
Array = new string[] { "prepare to go",<br />
"go",<br />
"prepare to stop",<br />
"stop" };<br />
}<br />
<br />
public void ShowState()<br />
{<br />
State %= Array.Length;
Console.WriteLine(Array[State ++]);
}<br />
}<br />
}<br />
<br />
output u see:
====================
prepare to go
go
prepare to stop
stop
prepare to go
go
prepare to stop
stop
prepare to go
go
press enter to exit
====================
best regards !
|
|
|
|
|
Is it possible for a class to call one of its own get/set accessors?
For example:
public class MyClass
{
double m_dbl;
public MyClass(double dbl)
{
m_dbl = dbl;
}
public int DummyProperty
{
get
{
return (int)m_dbl;
}
set
{
m_dbl = (double)value;
}
}
}
|
|
|
|
|
It's the same whether you are outside the class or inside the class.
DummyProperty = yourValue;
John
"You said a whole sentence with no words in it, and I understood you!" -- my wife as she cries about slowly becoming a geek.
|
|
|
|
|
Yes. You could have easily determined this by a test-- calling the accessor from the constructor and checking the result, maybe with a WriteLine statement in the setter. I'm not griping, just trying to save you some trouble for next time!
Your question is a good one; writing your code this way is often a smart thing to do for maintainability-- this way any validation for each property can be located in one place. I believe it could in some cases slightly degrade performance over setting your properties in the constructor, since each property set amounts to a method call, but the .NET compiler should in any even inline those calls unless they're over a certain size limit.
Conceptually speaking, you probably could've guessed the answer without testing if you'd written it this way:
this.DummyProperty = dbl;
As for me, I never use 'this' except for in a few specific situations, like writing a copy method.
Regards,
Jeff Varszegi
|
|
|
|
|
I know you already got your answer: Yes. But, I wanted to expand upon this a little...
I would say that you always want to access your properties through their accessors. Obviously, you can't always do this (i.e. read-only properties); but, it's an ideal that I suggest you try to adhear to. My reasoning behind this is that you might have business logic tied into your accessor methods that should always be used. You've showed this in your example, but let me show you another:
public class User
{
private string m_strName;
private string m_strPassword;
public User(string name, string password)
{
Name = name;
Password = password;
}
public string Password
{
get { return m_strPassword; }
set
{
if ( ValidPassword(value) )
m_strPassword = value;
}
}
...
} With this example, I'd have to do the User.ValidPassword(string) check every time I wanted to set the value. Instead, if I keep this logic in the setter, and just plan to always use that, I don't have to worry about it.
Of course, you won't always have special logic to put into your getters and setters. But, it would be better to be in the habbit of using them, so when you need to do it that way, you're not trying to change your ways.
Michael Flanakin
Web Log
|
|
|
|
|
Hi,
I have a datagrid populated from an XML file.
<pairs>
<pair>
<x>1</x>
<y>1</y>
</pair>
<pair>
<x>2</x>
<y>8</y>
</pair>
...
</pairs>
When I click the headers to sort it, they seem to be sorted as if the values were strings (ie a list of 1 to 10 comes out 1, 10, 2, ...)
How do I persuade them to be treated as numbers (doubles)?
---
J
|
|
|
|
|
You should create Schema for your XML files, you can create a file with .xsd extenstion and you indicate your types in it. For the start point see XML Schema Reference (XSD) topic in MSDN. I think there are some examples in this site too.
Mazy
"A bank is a place that will lend you money if you can prove that you don't need it." - Bob Hope
|
|
|
|