|
Quote: No, it won't It will and it's been verified. I have checked it also with Redgate ANTS profiler, the memory is never freed. The operating system interface slows down and sometimes OutOfMemoryException appears.
|
|
|
|
|
Ahem,
Quote: Because a form displayed as a dialog box is hidden instead of closed, you must call the Dispose method of the form when the form is no longer needed by your application.
|
|
|
|
|
He creates it in a using block, so Dispose should be called automatically.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I've been looking at code way too long. I completely missed the using and just expected to see the Dispose somewhere after the ShowDialog().
|
|
|
|
|
I know the feeling - I keep reading what I meant to write...
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Read the documentation on ShowDialog[^]. If you show a form using ShowDialog, you are responsible for Disposing the form when you're done with. Failure to do so will result in memory and resource leaks.
|
|
|
|
|
Is this true even if you call Close() in the AcceptButton and the CancelButton handlers?
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
Yep. the form is not really closed but is hidden when you return from ShowDialog.
|
|
|
|
|
As you can see from my code the ShowDialog is enclosed in using block. This forces the dialog to be disposed by forcing the Dispose method to be called.
|
|
|
|
|
Having a regex with several matched groups I would like to change the groups value before expanding the replace-string. For example, if the group $1 contains "abc" i try to get an replacement of "axc". Because the change to be applied depends on the group's position I need to do it on the group's value. Is there any chance to solve it whithout manually expanding the replace-string? If not, for manually expanding my approach would look like:
get all groups an their names
sort the names in descending length
foreach name check if replace.contains(${name}) [for groups like ${1} also check $1; for named groups also check the numbered Version]
and if yes, replace with the modified value of the group.
Do I overlook something? Or is there a smarter way?
Thanks for any suggestion.
|
|
|
|
|
It's not entirely clear what you're trying to do. An example of the input and expected output would probably help.
But if you're just trying to inject some logic into the replacement, you probably want to use the Replace overload which takes a MatchEvaluator delegate:
Replace Method | Microsoft Docs[^]
string text = "four score and seven years ago";
Regex rx = new Regex(@"\w+");
string result = rx.Replace(text, match =>
{
string x = match.Value;
if (char.IsLower(x[0]))
{
x = char.ToUpper(x[0]) + x.Substring(1, x.Length - 1);
}
return x;
});
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
My project is a asp.net C# web application.
I am running code that exports several pdfs and excel files at one time. I don't believe this issue is anything to do with that though.
I added an updatepanel that I am using to prompt the user to continue on to the next set of files to export.
Everything works perfectly on my local server but when I publish it the my development server and try to click a button it looks for a local path. There is no where in my code where I have anything hard coded to a local path, I use Server.MapPath for everything, here is what it's looking for:
'C:\Users\User\Desktop\TCS - WinHost (NEW GOOD)\Avenue\Equipment\Invoice.aspx'
Why would my development server look for a local path? How would it even know to look for this local path? Thank you advance for any help anyone can offer.
Here is the full error screen:
Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
Avenue.Equipment.Invoice.btncontinue_Click(Object sender, EventArgs e) in C:\Users\User\Desktop\TCS - WinHost (NEW GOOD)\Avenue\Equipment\Invoice.aspx.cs:1284
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9692746
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3562
|
|
|
|
|
Look at the error message:
Quote: Object reference not set to an instance of an object. It's not complaining about a path, it's complaining about an null reference.
This is one of the most common problems we get asked, and it's also the one we are least equipped to answer, but you are most equipped to answer yourself.
Let me just explain what the error means: You have tried to use a variable, property, or a method return value but it contains null - which means that there is no instance of a class in the variable.
It's a bit like a pocket: you have a pocket in your shirt, which you use to hold a pen. If you reach into the pocket and find there isn't a pen there, you can't sign your name on a piece of paper - and you will get very funny looks if you try! The empty pocket is giving you a null value (no pen here!) so you can't do anything that you would normally do once you retrieved your pen. Why is it empty? That's the question - it may be that you forgot to pick up your pen when you left the house this morning, or possibly you left the pen in the pocket of yesterdays shirt when you took it off last night.
We can't tell, because we weren't there, and even more importantly, we can't even see your shirt, much less what is in the pocket!
Back to computers, and you have done the same thing, somehow - and we can't see your code, much less run it and find out what contains null when it shouldn't.
Look at your stack trace, and it's in your Invoice.ASPX file on line 1284 - in VS, you can just type CTRL+G, enter 1284 ENTER and it'll take you right to the line.
Put a breakpoint at the beginning of the method containing the error line, and run your program from the start again. This time, VS will stop before the error, and let you examine what is going on by stepping through the code looking at your values.
But we can't do that - we don't have your code, we don't know how to use it if we did have it, we don't have your data. So try it - and see how much information you can find out!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Thank you for your reply, and I definitely understand what "Object reference not set to an instance of an object." means.
And line 1284 is where at the btncontinue_Click event is.
The problem as I see it is this line in the stack trace:
Quote: NullReferenceException: Object reference not set to an instance of an object.]
Avenue.Equipment.Invoice.btncontinue_Click(Object sender, EventArgs e) in C:\Users\User\Desktop\TCS - WinHost (NEW GOOD)\Avenue\Equipment\Invoice.aspx.cs:1284
Like I said everything works fine on my local server.
This error is from my production server - of course the production server wouldn't be able to find something from "C:\Users\User\Desktop\TCS - WinHost (NEW GOOD)\Avenue\Equipment\Invoice.aspx.cs" and return a null - that makes prefect sense.
What I don't get is why my production server is trying to find something on the local host server, it's looking in the wrong place.
And I just realized every time I meant to say "production server" in my previous post I said "development server"...
Do you get what I mean now? Sorry for the confusion.
|
|
|
|
|
No, the error message is just telling you the full path of the file in which it found the problem, and the line number in that file that it was executing when the problem occurred: it's part of the Continue button click event handler. Look at the path, and "C:\Users\User\Desktop\TCS - WinHost (NEW GOOD)\Avenue" is probably the root folder for your website on the production machine - the one that MapPath replaces "~" with.
If it's on your Prod server, but not your Dev, then you are going to have to add logging statements to look at the various values that line is dealing with and find which is null, since you can't use the debugger.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Thank you sir for leading me down the right path!
I figured out for some reason a Session variable was going null after post backs - I changed it to a View State and it`s all good.
Appreciate the help and timely responses!
|
|
|
|
|
You're welcome!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
this is my code logic we are not getting user mail id or birthday Error Undifined
function facebookLogin() {
FB.login(function (response) {
if (response.authResponse) {
FB.api('/me', function (response) {
jQuery('#txtRegUserName').val(response.name);
console.log(response.email);
console.log(response.id);
console.log(response.birthday);
alert(response.name);
jQuery('#txtLastName').val(response.last_name);
jQuery('#txtRegEmail').val(response.email);
jQuery('#hdfUID').val(response.id);
// FB.logout(function (response) {
// });
});
} else {
jQuery('#txtRegUserName').val('');
jQuery('#txtLastName').val('');
jQuery('#txtRegEmail').val('');
jQuery('#hdfUID').val('');
}
}, { scope: 'email' });
return false;
}
FB.init({
appId: '16953721********',
status: true, // check login status
scope: 'id,name,gender,user_birthday,email,public_profile',
cookie: true, // enable cookies to allow the server to access the session
xfbml: true, // parse XFBML
channelUrl: 'http://localhost:4034/channel.html', // channel.html file
oauth: true, // enable OAuth 2.0
enableProof: true
});
what i write wrong please help me
modified 6-Jul-17 5:30am.
|
|
|
|
|
You do realise that your code is JavaScript and this is the C# forum don't you?
This space for rent
|
|
|
|
|
Hi all, i have an asp.net project which uses crystal report for printing reports. I have a generated a very detailed report which uses 2 sub-reports. Client clicks on a row and based on the row value report is being generated and being displayed.
where i need help is client wanting to select multiple row on the grid and click on a button and generate the report for all those selected values.
I am generating an array for the selected values for example [3,5,7,212,4] and for each of those parameters i need my report to be generated and show in single page. Took me 2 days to do research but no luck yet. I am hoping to get an expert answer on here. Thank you all
aspx code
<pre lang="c#">
<form id="form1" runat="server">
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="True" Height="50px" ReportSourceID="CrystalReportSource1" ToolPanelWidth="200px" Width="350px" ReuseParameterValuesOnRefresh="True" />
<CR:CrystalReportSource ID="CrystalReportSource1" runat="server" >
<Report FileName="~/Report/Invoice/VendorInv.rpt" >
</Report>
</CR:CrystalReportSource>
</form>
var InvoiceNum = Request.QueryString["InvoiceNum"];
this.Title = "#" + InvoiceNum;
var crReport = new ReportDocument();
string reportpath = "MyOwnReportPath";
crReport.Load(reportpath);
crReport.SetParameterValue("InvoiceNum", InvoiceNum);
SetDBLogonForReport(crReport);
CrystalReportViewer1.ReportSource = crReport;
crReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, IsReprint, InvoiceNum);
Cache.Remove(crReport.ToString());
On the above code block i need a foeach loop to pass the parameters that i am keeping in the array[
[3,5,7,212,4] ] but as result i need all report shown in single pdf.
|
|
|
|
|
I have the following on a Winform:
- Button - to open *.txt file, code already done and works
- Combo Box - Display the dates found
- Datagridview - show information for the date selected
What code I have so far is:
private void Historybutton_Click(object sender, EventArgs e)
{
SSBPgroupBox.Enabled = false;
DataTable HFdt = new DataTable();
DialogResult result1 = openFileDialog2.ShowDialog();
if (result1 == DialogResult.OK)
{
String Fname = openFileDialog2.FileName;
string raw_text = System.IO.File.ReadAllText(Fname);
HFdt.Columns.Add("Sequence");
HFdt.Columns["Sequence"].DataType = Type.GetType("System.Int32");
HFdt.Columns.Add("Timing");
HFdt.Columns["Timing"].DataType = Type.GetType("System.Int32");
}
HistorydataGridView.DataSource = HFdt;
}
Sample of text file:
>17/05/15-16:40:13:BLAST DRIVER ON
>-
>BLASTING PLAN
>-
>PU1053 (0005 DETS):
>-
>1/7B7C35;11/7B70B2;21/7B7058;31/7B83A1;41/7B70D1;
>-
>BLAST SUMMARY
>-
>1 PU, 00005 DETS
>-
>DELAYS MIN/MAX IN MS : 00001 / 00041
>-
>GAP MIN/MAX IN MS : 00010 / 00010
>-
>16:40:32:LINE TEST
>-
>CALIBRATION
>-
>EXTRA DETS :None
>-
>INTERMITTENT CONNECTION DETS :None
>-
>TEST DETS
>-
>MISSING DETS :None
>-
>OUT OF ORDER DETS :None.
>-
>INCOHERENT DETS :None
>-
>DELAY ERRORS DETS :None
>-
>16:41:52:TEST END
>-
>16:44:02:CHARGE
>-
>CHECK ENERGIE
>-
>ADDITIONAL MISSING DETS :None
>-
>LOW ENERGY DETS :None
>-
>ADDITIONAL INCOHERENT DETS :None
>-
>16:44:29:FIRE
>-
What I want exactly is to show the date as follows in the combo box:
>17/05/15 - 0005 Dets
The date is obtained from the search for all dates and returning line 1 to the combobox and the 0005 dets from line 5 as in the sample.
When the user selects this date the datagridview will show:
>Sequence Timing
>
>1 1
>
>2 11
>
>3 21
>
>4 31
>
>5 41
The sequence is automatically created.
The Timing is obtained from Line 7 in the sample
I have struggled finding a way to do this so any and all help will be appreciated.
|
|
|
|
|
I'm not sure about your issue and what you want to get ... but I think you should create your own (customized) de-serializer for the Text-file which creates the datatable in the way you need.
For that it coud be necessary the read the file line by line and put the Content into the cells od the datatable where you want to have it.
|
|
|
|
|
Hi Ralf,
I am very very new to programming and do it on a private basis to make my work easier.
My problems are:
1. I do not know how to use C# in a Winform to search for the dates in a text file that I open.
2. I do not know how to combine the date with the amount it finds for that date in a combobox.
3. I do not know how to automatically create a columns and fill it with 1 to 100 for the amount of records found in the text file.
4. I do not know how to get the information for the date into a datagridview.
I have been busy with this little program for over 3 weeks and have searched and searched and cannot find any solution.
Regards
|
|
|
|
|
You misunderstood ...
What I suggest to you is :
- build a method which reads your file (line by line) - there are several information for this to be found with Google
- all your lines are Strings
- if there are multiple information in one string(-line) then separate it
- now put you information-parts, which are relevant for you, into the DGV (directly or by a datatable - both ways exists)
|
|
|
|
|
I have managed to get some of the information into the combo box using the following code.
private void Historybutton_Click(object sender, EventArgs e)
{
DataTable HFdt = new DataTable();
DialogResult result3 = openFileDialog2.ShowDialog();
if (result3 == DialogResult.OK)
{
String Fname = openFileDialog2.FileName;
DateTime d = DateTime.Now;
var format = "yy/MM/dd-HH:mm:ss";
var fileDates = System.IO.File.ReadAllLines(Fname)
.Where(l => l.Length >= format.Length
&& DateTime.TryParseExact(l.Substring(0, format.Length)
, format
, CultureInfo.InvariantCulture
, DateTimeStyles.None
, out d)
)
.Select(l => d)
.OrderBy(dt => dt);
if (fileDates.Any())
{
DatecomboBox.Items.Add(fileDates.First());
DatecomboBox.Items.Add(fileDates.Last());
}
}
}
I am not sure if I am moving in the right direction or not.
Only snag now is I cannot get all the dates only the first and last.
When I change the last 2 to:
DatecomboBox.Items.Add(fileDates);
My result in my Combobox is:
System.Linq.OrderedEnumerable`2[System.DateTime,System.DateTime]
Any suggestions are welcome.
|
|
|
|