|
Hi!
I need a simple way to round a Decimal variable to a specific number of decimals.
Any suggestions? Isn't there any function that works something like: math.round(theVariable, 2), to get 2 decimals?
/Joplinazz
|
|
|
|
|
Yes, there is, why did you guess there might me, and not look ?
Math.Round(12.42332334, 2, MidpointRounding.ToEven)
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Ok someone on here mentioned to me that I should use a printDocument to create the pages I want to create. Basically I have each child that has a record of their payments they have made. Now at the end of the year for each child I want to print the record for them. At the top of the page will be our information and social security numbers for tax purposes and below that in the center of the page will be the childs name.
Then below that will be 3 columns for the payments they made which look like this:
$75 --> Paid on: 03/03/08
and so on..
Now I have it print to a print document and you can view the information on my form (printPreviewControl). But when you click print preview, the layout is totally different from the printPreviewControl on the form. Why is this? When you click print preview and the dialog pops up it is missing half the information!
Is this the way I should be doing this or is there an easier/different way? It should also print all the information for all the children, not just one child at a time. So there will be multiple pages involved ( about 5 ).
|
|
|
|
|
Ok I have changed some things, but for some reason the printpreviewControl displays what I write to the printDocument. But the PrintPreviewDialog displays nothing? I have the printpreviewdialog document set to my printDocument1
whats wrong?
|
|
|
|
|
We really need to see your code to be able to tell you what you did wrong.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
I will post it, its kind of long.. but here it is:
public void getChilds(int Ccount)
{
string path = Directory.GetCurrentDirectory();
DirectoryInfo dInfo = new DirectoryInfo(path + @"\Children\");
DirectoryInfo[] dirs = dInfo.GetDirectories();
printPreviewControl1.Rows = dirs.Length;
if (dirs.Length == Ccount)
{
currentChild = "Done";
return;
}
if (currentChild != "Done")
{
switch (Ccount)
{
case 0:
currentChild = dirs[0].Name;
currentChildPath = dInfo + dirs[0].Name + @"\";
break;
case 1:
currentChild = dirs[1].Name;
currentChildPath = dInfo + dirs[1].Name + @"\";
break;
case 2:
currentChild = dirs[2].Name;
currentChildPath = dInfo + dirs[2].Name + @"\";
break;
case 3:
currentChild = dirs[3].Name;
currentChildPath = dInfo + dirs[3].Name + @"\";
break;
case 4:
currentChild = dirs[4].Name;
currentChildPath = dInfo + dirs[4].Name + @"\";
break;
case 5:
currentChild = dirs[5].Name;
currentChildPath = dInfo + dirs[5].Name + @"\";
break;
case 6:
currentChild = dirs[6].Name;
currentChildPath = dInfo + dirs[6].Name + @"\";
break;
case 7:
currentChild = dirs[7].Name;
currentChildPath = dInfo + dirs[7].Name + @"\";
break;
case 8:
currentChild = dirs[8].Name;
currentChildPath = dInfo + dirs[8].Name + @"\";
break;
case 9:
currentChild = dirs[9].Name;
currentChildPath = dInfo + dirs[9].Name + @"\";
break;
default:
currentChild = "Done";
return;
}
childCount++;
}
else
{
return;
}
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
getChilds(childCount);
if (currentChild == "Done")
{
e.HasMorePages = false;
return;
}
else
{
float x = e.PageBounds.Left;
float r = e.MarginBounds.Right;
float y = e.PageBounds.Top;
float b = e.PageBounds.Bottom;
float c = e.MarginBounds.Width / 2;
e.Graphics.DrawString(top[0], new Font("Arial", 10), Brushes.Blue, r, y, new StringFormat(StringFormatFlags.DirectionRightToLeft));
y += 1 + new Font("Arial", 10).GetHeight();
e.Graphics.DrawString(top[1].ToString(), new Font("Arial", 10), Brushes.Blue, r, y, new StringFormat(StringFormatFlags.DirectionRightToLeft));
y += 1 + new Font("Arial", 10).GetHeight();
e.Graphics.DrawString(top[2], new Font("Arial", 10), Brushes.Blue, r, y, new StringFormat(StringFormatFlags.DirectionRightToLeft));
y += 1 + new Font("Arial", 10).GetHeight();
e.Graphics.DrawString(top[3], new Font("Arial", 10), Brushes.Blue, r, y, new StringFormat(StringFormatFlags.DirectionRightToLeft));
y += (new Font("Arial", 10).GetHeight() * 2);
e.Graphics.DrawString(currentChild, new Font("Times New Roman", 14, FontStyle.Bold ^ FontStyle.Underline), Brushes.Red, c - (currentChild.Length / 2), y, new StringFormat());
FileStream fileOpen = new FileStream(currentChildPath + "Paid.daycare", FileMode.Open, FileAccess.Read);
StreamReader fileSR = new StreamReader(fileOpen);
string strLine = fileSR.ReadLine();
times = 0;
y += new Font("Times New Roman", 14, FontStyle.Bold ^ FontStyle.Underline).GetHeight();
centerLine = y;
rightLine = y;
while (strLine != null)
{
if (times < 31)
{
y += 2 + new Font("Arial", 12).GetHeight();
e.Graphics.DrawString(strLine, new Font("Arial", 10), Brushes.Black, x, y, new StringFormat());
strLine = fileSR.ReadLine();
times++;
}
else if (times > 30 && times < 61)
{
centerLine += 2 + new Font("Arial", 12).GetHeight();
e.Graphics.DrawString(strLine, new Font("Arial", 10), Brushes.Black, c - strLine.Length, centerLine, new StringFormat());
strLine = fileSR.ReadLine();
times++;
}
else if (times > 60 && times < 91)
{
rightLine += 2 + new Font("Arial", 12).GetHeight();
e.Graphics.DrawString(strLine, new Font("Arial", 10), Brushes.Black, r, rightLine, new StringFormat(StringFormatFlags.DirectionRightToLeft));
strLine = fileSR.ReadLine();
times++;
}
}
e.HasMorePages = true;
}
}
A lot of that is to make it print like 30 lines, then if it is over 30 lines then it prints in the center of the page, then if it is over 60 lines then it starts printing on the right side of the page.
Now my problem is, that it prints correctly to the PrintPreviewControl, but it just prints a blank page when you click print!
private void printToolStripMenuItem_Click(object sender, EventArgs e)
{
printDocument1.Print();
}
the printpreviewControl document is set to: printDocument1. The printDocument1 name is printDocument1, but why does it print a blank page when this code actually prints the information to the printDocument and it SHOWS it on the printPreviewControl?
|
|
|
|
|
Jacob Dixon wrote: y += 1 + new Font("Arial", 10).GetHeight();
I can see that you're leaking a lot of resources by doing this over and over. Why not keep a font as a member variable ?
Jacob Dixon wrote: FileStream fileOpen = new FileStream(currentChildPath + "Paid.daycare", FileMode.Open, FileAccess.Read); StreamReader fileSR = new StreamReader(fileOpen);
You also never close your files, might your test involve a printpreview then a print, and the print fails b/c the files are still open ?
Have you set a breakpoint and stepped through to try to work out what could be different when you print ? Does nothing print at all ?
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
I did forget those to close those but it didn't show an error. I'm just trying to figure out why it doesn't print... It actually "PRINTS" but it just prints a blank page and nothing that I drew on the printDocument.. why is it printing a blank page?
|
|
|
|
|
Ok I have fixed the leaks you were talking about and used it as a variable.
I have also closed the files after I was finished with them.
It still prints, but just prints a blank page!
How's this possible when I have written to the printDocument before asking it to print?
|
|
|
|
|
Ok I took away the printpreviewcontrol and now it prints all the information??
|
|
|
|
|
How to Export data from PrintDocument or PrintPreview Control?
I have data(Report) in PrintDocument and I want to save that in .Pdf....
-Bhavik
bhaviks@yahoo.com
Bhavik Shah
6, Gautam Appartment,
Opp. Agam mandir,
Gopipura,
Surat, Gujarat, India
9687478087
|
|
|
|
|
Hi!
I am trying to work with Channels.
I implimented the 3.5 frameWork
And the IDE does not know this pakcage:
System.Runtime.Remoting.Channels.Tcp
What am i doing wrong?
Thanks
|
|
|
|
|
Hi,
you will get Intellisense while typing TcpChannel a=new TcpChannel();
provided you have a using System.Runtime.Remoting.Channels.Tcp; line
at the top of the relevant file(s). That in turn requires you provide your project
with a reference to the .NET component called "System.Runtime.Remoting" (right
click in the solution pane and choose Add Reference...).
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- 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 PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
Hi!
I get this line:
Error 1 The type or namespace name 'Tcp' does not exist in the namespace 'System.Runtime.Remoting.Channels' (are you missing an assembly reference?) C:\Documents and Settings\Yossi_Tubis\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\Form1.cs 9 40 WindowsApplication1
what should i do??
Thanks
|
|
|
|
|
either reread my earlier reply and pay attention to all the details,
or publish OS,VS,.NET versions and all relevant code.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- 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 PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
Look here[^].
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
During the constructor I display a splash screen with the following code. This screen is boardless and also has no title bar. What is happening is the splash screen displays center screen followed by the main dialog screen behind the splash screen. The splash screen although is disposed, stays displayed until the main dialog screen gets a WM_PAINT (caused by clicking on the screen). This is written in C# and .NET.
How do I get the main screen to repaint after my splash screen is gone without having to click within the dialog? Am I missing something...
<br />
Thread th = new Thread(new ThreadStart(DoSplash));<br />
th.Start();<br />
Thread.Sleep(3000);<br />
th.Abort();<br />
Thread.Sleep(2000);<br />
...<br />
private void DoSplash()<br />
{<br />
Splash sp = null;<br />
try<br />
{<br />
sp = new Splash();<br />
sp.ShowDialog();<br />
}<br />
<br />
catch (ThreadAbortException)<br />
{<br />
sp.Dispose();<br />
} <br />
}<br />
Thank you,
Glenn
|
|
|
|
|
You're creating UI controls on a background thread that is MTA apartment state. That's a no-no, and will cause issues.
Before starting your thread, call
th.SetApartmentState(ApartmentState.STA);
|
|
|
|
|
Hi -- Thank you for your response. I added what you suggested, yet the splash screen still sticks around until you click in the main window. Any other ideas?
Thank you kindly,
Glenn
|
|
|
|
|
I have a project which works with it's own special files - *.gdraw.
I want to make the program when a *.gdraw file is double clicked to be loaded in the program. How is this done?
...
I read some articles and learned that i need the command line arguments. static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm(args));
}
This is the code in the Program.cs. But it doesn't seem to work.
modified on Sunday, March 9, 2008 2:26 PM
|
|
|
|
|
|
Hi all,
Whenever my ListView (let's call it ListView1) selected IDX changes, I wish to grant focus to another ListView (let's call it ListView2), but this is a bit problematic:
If I write ListView2.Focus() inside the ListView1.SelectedIndexChanged event handler, ListView1 is focused. In order to explain this behaviour, I'll mention few facts:
1. Mouse click is composed of 2 events: MouseUp and MouseDown. in each of these cases the control receives focus, if he didn't have it already.
2. whenever changing the selected line at a ListView, the event SelectedIndexChanged is called twice: once for removing the selection from the previously selected line, and once for selecting the new line.
So, the flow is as followed:
1. starting point: line 1 is selected in ListView1.
2. I'm clicking line 2 of ListView1.
3. Line 1 of ListView1 is unselected, which causes firing the event SelectedIndexChanged of ListView1. Now ListView2 receives focus.
4. Line 2 of ListView1 is unselected, which causes firing the event SelectedIndexChanged of ListView1. ListView2 already has focus.
5. Now ListView1 receives focus, since the MouseUp event (fired due to the MouseClick event).
Does anyone have a solution for focusing a control when changing a ListView selected IDX? it also bothers (due to other reasons) that the event SelectedIndexChanged is fired twice for each line selection. Verifying this behaviour can be done by using:
private void listView1_SelectedIndexChanged(object sender, EventArgs e)<br />
{<br />
System.Threading.Thread.Sleep(500);<br />
System.Media.SystemSounds.Beep.Play();<br />
}
When you'll change the selected line, 2 beeps will be heard.
Thanks and sorry for the long question!
Eyal.
|
|
|
|
|
I've always found the ListView to be a very quirky control to work with. The biggest question to answer is why are you using it?
If possible, you should work around it by getting rid of the listview and go with the ListBox instead. Also you want to avoid what you do with events.
You can call SuspendLayout() (I THINK) you will have to verify in the method description. Basically it suspends the events when changing things around in the control.
You can also minimize issues by avoiding too many events. SelectedIndexChange is a good one to get yourself into a hung state just by having one control change another control and having both of them trigger off the change event.
In my test I had the selected index change load the second listview with items. I failed to give it focus as well....but I found that I only had the event fire once!
|
|
|
|
|
You probably get only one SelectedIndexChanged event fired since no item was selected prior to your selection. If an item is selected and then you select different item, the event is fired twice: once for unselecting the first item and once for selecting the second item.
I'll try using the SuspendLayout() function as you suggested and see if it can help.
As for using ListBox - what makes it better? Doesn't it have less functionality than ListView? I'm using ListView since every item in my application is composed of multiple columns.
Thanks a lot for your help!
Eyal.
modified on Tuesday, March 11, 2008 4:28 AM
|
|
|
|
|
WRONG.
I get only one event fired because only one event firing happens when an event gets selected. There is no such thing as an event getting fired twice because the control is 'unslecting the first item' unless you have written some code that issues the event. Regardless of how many times I did the selection, I got only one event. The only time you get multiple events fired is because you've written some bad code that is causing the multiple events to fire. Are you calling an event like Select()? Are you programattically doing something to try and change a selection? Are you bound to other events such as losing focus, our MouseLeave, or anything like that? Are you manually setting focus to something when you shouldn't?
No matter how frequently I select an item there is always only one event that is fired. That is the event model in Windows -- not something I've done. The field getting 'unselected'? That is not a seperate event unless you bind yourself to the lost focus event (or some such stupid thing as that)
In a Windows Form application the ListBox is far more flexible. You can put any object into the list. You control what is displayed by handling the ToString event. The ListView can only have ListViewItem objects in it. So from that aspect of it the ListView is pitiful.
This is the totallity of my code and I get only one event each time I select a new item no matter how many times I do it in a row. And it would be extremely amateurish of me to say I'm getting only one event if I had not done multiple selects in a row. So keep your insults to yourself.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedIndices.Count.Equals(0)) return;
if (listView1.SelectedItems[0].Text.Equals("Fish"))
LoadFish();
else
LoadMammals();
}
private void LoadMammals()
{
listView2.Items.Clear();
listView2.Items.Add(new ListViewItem("Horse"));
listView2.Items.Add(new ListViewItem("Human"));
listView2.Focus();
}
private void LoadFish()
{
listView2.Items.Clear();
listView2.Items.Add(new ListViewItem("Mantaray"));
listView2.Items.Add(new ListViewItem("Lion Fish"));
listView2.Focus();
}
}
|
|
|
|
|