|
You could've surfed CP for existed question.
BTW, It's HERE[^] only.
Regards,
Hiren.
"The more we give of anything, the more we shall get back." - Grace Speare
(you can consider this quote while giving vote also)
Microsoft Dynamics CRM
|
|
|
|
|
|
Are you kidding here ?
Redirecting to the same page is not an answer, I guess.
Regards,
Hiren.
"The more we give of anything, the more we shall get back." - Grace Speare
(you can consider this quote while giving vote also)
Microsoft Dynamics CRM
|
|
|
|
|
It reminds me of the definition of recursive in the dictionary :
recursive adj. See recursive
|
|
|
|
|
5!
Regards,
Hiren.
"The more we give of anything, the more we shall get back." - Grace Speare
(you can consider this quote while giving vote also)
Microsoft Dynamics CRM
|
|
|
|
|
In my smart client application (3.0 Framework) i would like to use Linq.
Whe i tried below code.
string[] names = { "Burke", "Connor", "Frank",
"Everett", "Albert", "George",
"Harris", "David" };
IEnumerable<string> expr = from s in names
where s.Length == 5
orderby s
select s.ToUpper();
foreach (string item in expr) { Console.WriteLine(item); }
This code is throwing an error message
Could not find an implementation of the query pattern for source type 'string[]'. 'Where' not found. Are you missing a reference to 'System.Core.dll' or a using directive for 'System.Linq'?
i have used System.Linq directive in code but unable to add 'System.Core.dll' becuse as it disable. As per the requirement we need to stick on with 3.0 Framework. Any other way to do it.
|
|
|
|
|
Tiger456 wrote: Could not find an implementation of the query pattern for source type 'string[]'. 'Where' not found. Are you missing a reference to 'System.Core.dll' or a using directive for 'System.Linq'?
I think IEnumerable<string> is not supported by LINQ in .NET 3.0 Framework.
You need to implement that functionality manually or initialize query result with var statement.
Click Here for more..[^]
Regards,
Hiren.
"The more we give of anything, the more we shall get back." - Grace Speare
(you can consider this quote while giving vote also)
Microsoft Dynamics CRM
modified on Friday, December 3, 2010 1:28 AM
|
|
|
|
|
Thanks for the response.
But using this method will force the client machine to have .NET 3.5 Framework to run appication right ?
|
|
|
|
|
Yes, For your code you need to upgrade to FW 3.5.
Or you can achieve the same manually using the link I provided.
Regards,
Hiren.
"The more we give of anything, the more we shall get back." - Grace Speare
(you can consider this quote while giving vote also)
Microsoft Dynamics CRM
|
|
|
|
|
So with .NET Framework 2.0 its not possible ?
|
|
|
|
|
Hi Im new to programming, im taking an online class and sometimes it takes a while for someone to get back to me.
We created a notepad program and i want the user of the program to be able to save the file and once the first initial save is saved it wont prompt the user with another pop up asking where to save the file it will automatically save it to the last place it was saved. While writing this i think i answered my other question for the save as haha =^) the Save As would just use the same save click event method.haha
The other is how would i check to see if the user has saved there file prior to closing the program.
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog saveFile = new SaveFileDialog();
saveFile.Title = "Save File";
saveFile.Filter = "Text File|*.txt|All Files (*.*)|*.*";
DialogResult dr = saveFile.ShowDialog();
if (dr == DialogResult.OK)
{
StreamWriter sw = new System.IO.StreamWriter(saveFile.FileName);
Form activeForm = this.ActiveMdiChild;
if (activeForm != null)
{
TextBox activeText = (TextBox)activeForm.ActiveControl;
if (activeText != null)
{
sw.Write(activeText.Text);
sw.Close();
}
}
}
}
//this is my close, it works but not right if the person has saved their data it will still show the message box because it has text in the text box.
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
if (edittextBox.Text != null)
{
MessageBox.Show("Please make sure you save your data!");
}
else
{
Close();
}
}
Thanks for your Help ?=^)
modified on Friday, December 3, 2010 9:01 PM
|
|
|
|
|
All you need to do is store the value of the filename, and check to see if that value is set. If it's not, then display the dialog.
|
|
|
|
|
But be sure to clear it if the user starts a new document...otherwise the program will overwrite the old one when saving.
|
|
|
|
|
Would i do this in the private void saveToolStripMenuItem_click event?
Sorry for sounding so obtuse haha I'm a newbie
|
|
|
|
|
Basically, you get the value as soon as you've get the filename (and path). Store this as a member rather than a local variable.
|
|
|
|
|
Good Response Old Boy!
------------------------------------
I will never again mention that I was the poster of the One Millionth Lounge Post, nor that it was complete drivel. Dalek Dave
CCC League Table Link
CCC Link[ ^]
|
|
|
|
|
The traditional way is to have a "global" boolean variable indicating whether there have been any changes since the last save.
Basicially:
Saved -> false
User saves the file: Saved -> true
User types something or otherwise makes a change: Saved -> false
User saves file: Saved -> true
etc etc etc
Then just check the variable before clsoing the program. If it's false, prompt the user to save things.
|
|
|
|
|
Cool so when you say global out side of any of the components in the Form or Form1_Load, and not in one of my click events?
public partial class Form1 : Form
{
int count;
"bool Saved;"
}
private void Form1_Load(object sender, EventArfs e)
{
bool Saved;
}
im learning here hahaha
thanks for all your help =^) Ill get this sooner or latter ?=^0
|
|
|
|
|
Some people will say globals are naughty, and they're often right. In this case, not so much.
But, just to keep them happy, you don't really need a separate variable for it...if you put the filename (or an initial fake filename like "unsaved") in the title bar and append a * to it when it needs to be saved and remove it when it has been saved.
Then, instead of checking some variable, you just check the Text property of the form. If the last character is a *, then it needs to be saved.
Same principle, just cooler.
And more work for you, of course. But that's a good thing, if you really want to learn this stuff.
|
|
|
|
|
Good Answer.
Gets a 5.
------------------------------------
I will never again mention that I was the poster of the One Millionth Lounge Post, nor that it was complete drivel. Dalek Dave
CCC League Table Link
CCC Link[ ^]
|
|
|
|
|
you need both:
- a string holding the file path
- a boolean "dirty" flag
the path is set when you open an existing document or save the document; and it gets nulled at start, and when the user "clears" the document (no content => no path).
the dirty flag gets cleared any time you set the path (to null or to an actual path); and set on any change you make in the document (yes, that is in many many places in the code of a typical editor).
then, when you want to exit the app, the dirty flag tells you to ask the user: "shouldn't I save your current document first?"; same if your app can only handle one document at the time, and the user is about to open one while still holding dirty data.
And whenever the user saves without "SaveAs" (i.e. by performing "Save" or answering "yes" to "shouldn't I save ...", the path variable tells you whether you should ask for a path (if null) or use what you have already; a save through "SaveAs" always must ask for a path (and the answer gets stored in the string variable, unless cancelled).
Optionally, you could disable the "Save" menu item as long as path is null, forcing the user to use SaveAs.
Optionally again, you could have shortcut keys, and CTRL/S should do what "Save" does, i.e. ask for a path if and only if path is null. And to be top-notch, CTRL/S should even work when "Save" is disabled, i.e. when you don't have a path.
|
|
|
|
|
I usually use the same structure for this kind of things. Declare two private fields on the class (the form in this case);
bool _dirty = false;
string _filename = null;
Write the methods to open and save the file:
void Open(string filename)
{
_filename = filename;
_dirty = false;
}
void Save()
{
if (_filename != null)
Save(_filename);
else
SaveAs();
}
void Save(string filename)
{
_filename = filename;
_dirty = false;
}
void SaveAs()
{
if (dlg.ShowDialog() == DialogResult.OK)
Save(dlg.FileName);
}
Subscribe to the Closing event (when it is a Form):
void frm_FormClosing(object sender, FormClosingEventArgs e)
{
if (_dirty)
{
DialogResult dr = MessageBox.Show(this, "Do you want to save the changes?",
"Warning", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (dr == DialogResult.Yes)
Save();
else
e.Cancel = dr == DialogResult.Cancel;
}
}
So all you have to do is set _dirty field to true whenever there is any change. In your case, it might be in the TextChanged event of the TextBox.
|
|
|
|
|
This is so cool Thanks to all that has help with this you guys are Awesome =^)This makes learning allot more enjoyable ;^) because this stuff ant easy. haha
|
|
|
|
|
Well i think i got this thing working =^)except for one thing the save method?
I cant seem to figure out how to have it save back to its original place.
This is what i got for my save_click event
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog Save_File = new SaveFileDialog();
Save_File.Title = "File Saved";
Save_File.Filter = "Text Files|*.txt|All Files (*.*)|*.*";
DialogResult dr = Save_File.ShowDialog();
try
{
if (saveFileDialog1.FileName != "")
{
StreamWriter sw = new StreamWriter(Save_File.FileName);
sw.Write(txtBox);
sw.Close();
}
if (dr == DialogResult.OK)
{
StreamWriter sw = new StreamWriter(Save_File.FileName);
sw.Write(txtBox.Text);
sw.Close();
}
}
catch
{
SaveAs();
}
}
I know this displays a dialog box for asking where to save the file...
i also tried this to and still nothing
if (saveFileDialog1.FileName != "")
{
richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText);
}
else
{
evtSaveAs_Click(sender, e);
}
now should i create a Save method or is this fine? I know by creating a method i can use the same code in multiple places with out needing to write it all over again. But this is such a small app.
All you guys Rock Thanks so Much for your help ?=^)
Peace
|
|
|
|
|
Have another look at the methodology I posted in my previous answer. If you use it you will see that on your save_click event handler you only have to call Save method. If the file is new (_filename field is null) the it will call SaveAs method, asking for a file name, and if the file is not new it will save the changes with the same name it had. If you also have a SaveAs_click event handler, you should only call SaveAs method. Anyhow, I can see several mistakes on your code.
First of all, you are creating a new instance of a SaveFileDialog every time you want to save a file, but you do not dispose it at the end of the method. The best here is to add the dialog to the form at design time, dragging and dropping it from the toolbox as if you were adding any other control. This way you will only need one instance of the dialog and it will be disposed when your form gets also disposed. In my previous post this SaveFileDialog was the dlg object I used in the SaveAs method.
Once you call the ShowDialog method, the only one thing you have to check is the DialogResult object it returns. Checking for its FileName property before is a mistake, becouse if it returns a DialogResult.Ok then you can be sure its FileName property is right. In your code you have placed two consecutive if clauses, and if the user selects a filename both of them will evaluate their condition to true, so both of them will execute.
There is another important thing to pay attention. You are not disposing or closing the StreamWriter if there is an exception in the Write method. There are several ways to do this, but this is the one I like most:
try
{
using (StreamWriter sw = new StreamWriter(filename))
{
}
}
catch (Exception ex)
{
}
As I said, have another look at my previous post and make some tests with it. Once you completely understand it you will see that it is all you need and you can apply the same logic to many different applications.
|
|
|
|