|
wow! i was never knew about Uri!
thank you so much!
|
|
|
|
|
Is it possible to make the soapformatter ignore missing fields?
Eg if the file have been saved in a previous format and I later try to deserialize it into a new format where not all fields match 100%
Im aware of [OptionalField], but that is the opposite of what I want.
Optional lets me introduce new fields into my format.
I want to simply ignore old fields that are not used any more.
And I also know that I can implement ISerializable, but I do not want that, I just want to use the default mechanism but ignoring missing fields.
(last resort would be to roll my own formatter, but im trying to avoid that)
|
|
|
|
|
Hello all,
Does anybody knows how to change the default caption text in the ColorDialog component of .Net 2.0? Default it is set to "Color", while I want to be able to change this into: "Select foreground color".
With regards,
EiSl
|
|
|
|
|
How do I publish an XNA project? I want to be able to send it in an eMail.
- I love D-flat!
- Need. More. Code.
modified on Saturday, April 5, 2008 6:29 PM
|
|
|
|
|
Repost your question here
|
|
|
|
|
I did.
- I love D-flat!
- Need. More. Code.
|
|
|
|
|
Hi. I need to take a screen shot of a control - the control is plotterForm.expressionPlotter. I am using the following code:
<br />
private Bitmap GetBitmap()<br />
{<br />
Bitmap bmp = new Bitmap(plotterForm.expressionPlotter.Width, plotterForm.expressionPlotter.Height);<br />
Graphics g = Graphics.FromImage(bmp);<br />
Screen screen = Screen.FromControl(plotterForm.expressionPlotter);<br />
g.CopyFromScreen(new Point(screen.Bounds.Location.X, screen.Bounds.Location.Y), Point.Empty, plotterForm.expressionPlotter.Size);<br />
return bmp;<br />
}
The problem is that the location of which the screen shot is always the upper left corner of the desktop, not the upper left corner of the control.
In other words the screen.Bounds.Location is a point which is always (0;0). When i added MessageBox.Show(screen.ToString()); i received the following message:
Screen[Bounds={X=0,Y=0,Width=1024,Height=768} WorkingArea={X=0,Y=0,Width=1024,Height=739} Primary=True DeviceName=\\.\DISPLAY1
As if the screen hasn't captured the control. How can i fix this???
Still learning...
|
|
|
|
|
I realized that the Screen.FromControl is something entirely different from the thing i expected! But here comes another question - how can i find the location of a control in relation to the desktop?
Still learning...
|
|
|
|
|
Use...
PointToScreen(control.Location);
Matthew Butler
|
|
|
|
|
Can you not just use DrawToBitmap as in:
int height = plotterForm.expressionPlotter.Height;
int width = plotterForm.expressionPlotter.Width;
Bitmap bmp = new Bitmap(width, height);
plotterForm.expressionPlotter.DrawToBitmap(bmp, new Rectangle(0,0,width,height));
Because if you could i imagine it will be much easier.
My current favourite word is: Nipple!
-SK Genius
|
|
|
|
|
I changed the code of the project a little bit and the control which i want to capture is a panel. The panel has a written text using the DrawString method of the Graphics class.The screen shot is stored in the clipboard. When i take a screen shot using DrawToBitmap , when i paste the image in paint it appears, but the text isn't there.
The taken screen shot[^]
The image as it should be[^]
Why doesn't the DrawToBitmap method capture the text???
Still learning...
|
|
|
|
|
i don't know, i had trouble with a textbox not drawing the text when i used DrawToBitmap. Then all of a sudden it just started working. and i'm not sure why/
My current favourite word is: Nipple!
-SK Genius
|
|
|
|
|
Take a screen shot of the whole screen and then use an image editor?
Or, what I did was write a simple applet that I can position over the section of the screen I want to capture and have do the capture.
|
|
|
|
|
Im 99% sure that the DrawToBitmap method will invoke the OnPaint method on the control and pass a graphics object containing the bitmap.
so if you draw the text outside of the OnPaint method, that code will not be triggered when calling DrawToBitmap.
How are you drawing the text?
Control.CreateGraphics?
|
|
|
|
|
This is how things are:
I have created a control - ExpressionPlotter . It is used to plot math graphs - they are drawn on the control. The control has a panel which contains the graphs' information. In the OnPaint method of the ExpressionPlotter is the method which draws the text - DisplayExpressionsText . In DisplayExpressionsText the panel is sized according to the text and then in the drawing of the text the method panel.CreateGraphics is used to obtain the Graphics class. When it comes to the screen shot the DrawToBitmap is called for the ExpressionPlotter control.
I tried to draw the text in the Paint event of the panel, but when i started the program, the panel didn't show.
Still learning...
|
|
|
|
|
I did it! I moved the resizing of the panel to the OnPaint . Then i moved the drawing of the text to the Paint event of the panel. When i want to draw the text now i only have to Refresh() the panel.
Still learning...
|
|
|
|
|
nike_arh wrote: in the drawing of the text the method panel.CreateGraphics is used to obtain the Graphics class.
That's your problem. That means that you are always drawing the text on the screen. Use the Graphics object that is supplied in the event arguments to the Paint event.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Take a look at my article clickety in which I cover basic screen capture as well as capturing a specific area of the screen.
The source code is available for download from the article as well.
Regards
Guy
You always pass failure on the way to success.
|
|
|
|
|
When I open report by click button event - on the first time it opens, but on the second time (when I close report and open again), app breaks and appears error message:
System.InvalidOperationException was unhandled
Message="Invoke or BeginInvoke cannot be called on a control until the window handle has been created."
Source="System.Windows.Forms"
StackTrace:
at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
at System.Windows.Forms.Control.BeginInvoke(Delegate method, Object[] args)
at Microsoft.Reporting.WinForms.ReportViewer.OnRenderingComplete(ProcessThreadResult result, PostRenderArgs data)
at Microsoft.Reporting.WinForms.ProcessThreadArg.OnComplete(ProcessThreadResult result)
at Microsoft.Reporting.WinForms.ProcessingThread.ProcessThreadMain(Object arg)
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart(Object obj)
I was not use threads and I cannot locate cause of error.
Thank you for any help.
|
|
|
|
|
Thank you for sharing the exception. Is there some code that goes with it?
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.
|
|
|
|
|
Thank you for answering. The main part report's code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Reporting.WinForms;
using System.IO;
using System.Collections;
using System.Configuration;
using System.Management;
namespace DatabaseAccessWithADONET
{
public partial class ReportViewerFormIzv : Form
{
private static string ConStr =
ConfigurationManager.ConnectionStrings["DatabaseAccessWithADONET.Properties.Settings.PersonDatabaseConnectionString"].ConnectionString;
BindingManagerBase bindManager;
private bool PrintLayout = true;
bool loaded = false;
private CustomReportViewerMessages customMessages = null;
int current,max,tip;
public ReportViewerFormIzv()
{
InitializeComponent();
customizeReportViewer();
this.bindManager = this.BindingContext[this.cash.vReportBill, "IDBill"];
current = 0; tip = 0;
}
public void InitializeReport(string formName, string reportDisplayName, string reportPath, ReportDataSource reportDataSource)
{
this.Text = formName;
this.reportViewer.Reset();
this.reportViewer.LocalReport.DisplayName = reportDisplayName;
this.reportViewer.DocumentMapCollapsed = true;
this.reportViewer.LocalReport.ReportPath = reportPath;
this.reportViewer.Messages = this.customMessages;
this.reportViewer.LocalReport.DataSources.Add(reportDataSource);
this.reportViewer.RefreshReport();
}
private void reportViewer_RenderingComplete(object sender, RenderingCompleteEventArgs e)
{
if (!loaded)
{
this.reportViewer.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout);
this.reportViewer.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.FullPage;
loaded = true;
}
switch (tip)
{
case 0:
this.reportViewer.LocalReport.DisplayName = "Cash bill "+ cmbBon.Text;
break;
case 1:
this.reportViewer.LocalReport.DisplayName = "Cheque bill " + cmbBon.Text;
break;
case 2:
this.reportViewer.LocalReport.DisplayName = "Sell Products " + cmbDate.Text.Replace(':','.');
break;
default: break;
}
}
private void ReportViewerForm_Load(object sender, EventArgs e)
{
using (SqlConnection veza = new SqlConnection(ConStr))
{
veza.Open();
SqlDataAdapter da = new SqlDataAdapter("Select * from vReportProduct order by Date desc", veza);
da.Fill(this.cash.vReportProduct);
vReportProductBindingSource.Sort = "Date DESC";
}
this.ReportProductTableAdapter.Fill(this.cash.ReportProduct);
cash.ReportBill.AcceptChanges();
using (SqlConnection veza = new SqlConnection(ConStr))
{
SemiQuery sq = new SemiQuery();
veza.Open();
SqlDataAdapter da = new SqlDataAdapter("Select * from vReportBill where Tip=0 order by Date desc", veza);
cash.vReportBill.Clear();
da.Fill(this.cash.vReportBill);
max = cash.vReportBill.Rows.Count;
tip = 0;
DataSet ds = new DataSet();
string reportSourceFile = sq.getProjectSourcePath() + @"\ReportGot.rdlc";
SqlDataAdapter dak;
if (cash.vReportBill.Rows.Count > 0)
{
dak = new SqlDataAdapter("SELECT * FROM ReportBill where IDBill=" +
cash.vReportBill.Rows[current]["IDBill"].ToString() + " order by Date desc", veza);
}
else
{
dak = new SqlDataAdapter("SELECT * FROM ReportBill where IDBill=0", veza);
}
dak.Fill(ds);
InitializeReport("Reports", "Cash Bill", reportSourceFile, new ReportDataSource("Cash_Cash", ds.Tables[0]));
this.bindingNavigator1.BindingSource = this.vReportBillBindingSource;
cmbBon.Visible = true;
lblBon.Visible = true;
cmbDate.DataSource = vReportBillBindingSource;
cmbDate.ValueMember = "IDBill";
cmbDate.DisplayMember = "Date";
this.cmbDate.FormatString = "g";
}
outlookBar1.SelectedButton = outlookBar1.Buttons[0];
panel1.Visible = true;
loaded = true;
this.reportViewer.RenderingComplete += new
Microsoft.Reporting.WinForms.RenderingCompleteEventHandler(this.reportViewer_RenderingComplete);
this.reportViewer.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout);
this.reportViewer.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.FullPage;
this.WindowState = FormWindowState.Maximized;
max = cash.vReportBill.Count;
}
}
}
|
|
|
|
|
Hi,
I don't see any Invoke() or BeginInvoke(), and I don't see a button click handler either.
if you want effective help, show the relevant code, and use PRE tags. Read my sig.
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.
|
|
|
|
|
private void btnReport_Click(object sender, EventArgs e)
{
string reportSourceFile = getProjectSourcePath() + @"\ReportGot.rdlc";
ReportViewerFormIzv f = new ReportViewerFormIzv();
SqlConnection mConnection = new SqlConnection(ConStr);
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM ReportBill", mConnection);
DataSet ds = new DataSet();
da.Fill(ds);
f.InitializeReport("Reports", "Bill", reportSourceFile, new ReportDataSource("Cash_Cash", ds.Tables[0]));
f.Show();
}
And I nowhere use any Invoke() or BeginInvoke(). Whole code is pretty long for placing here.
|
|
|
|
|
Hi,
this may not be easy to locate.
The Invoke/BeginInvoke might not be yours; the ThreadStart probably is; and the
RenderingComplete must be yours.
I suggest you look at (all) the RenderingComplete handlers, and insert a try-catch block
in each of them, showing the entire exception if and when it occurs.
Use the debug build, watch for line numbers; tell Visual to always show line numbers.
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.
|
|
|
|
|
In my case, this error was caused because of an internal problem of the Reportviewer control, as the report rendering seems to be done by a separate thread.
Make sure that the "RefreshReport()" method is called only and just only when all the involved forms, controls, usercontrols, etc. are successfully initializated. In my case, I've called it on the "Shown" event of the ReportViewer's container form.
|
|
|
|