|
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();
}
}
|
|
|
|
|
OK,
So I've created a new project which has only one ListView with two items, and one event hadler - for SelectedIndexChanged event. Here is the code:
namespace TestListViewSelectedIndexChanged<br />
{<br />
public partial class Form1 : Form<br />
{<br />
public Form1()<br />
{<br />
InitializeComponent();<br />
}<br />
<br />
private void listView1_SelectedIndexChanged(object sender, EventArgs e)<br />
{<br />
System.Threading.Thread.Sleep(500);<br />
System.Media.SystemSounds.Beep.Play();<br />
}<br />
}<br />
}
The Sleep is ment to hear both beeps.
Now, whenever I select item, 2 beeps are heard. What's the explanation for this behaviour if the event only fired once?
Pleae note that I do not suspect your knowledge, I'm sure it's bigger than mine. I just want to understand this phenomenon.
Thanks,
Eyal.
|
|
|
|
|
Hi All,
Here's in interesting one. If you have a Dictionary like:
String1, 0
String2, 0
String3, 10
String4, 20
How do you locate the key(String4) based on the fact that it has the highest int value (20)?
Thanks,
Jammer
Going where everyone here has gone before!
|
|
|
|
|
Some C# 3 goodness:
string stringWithHighestIntValue = dictionary.OrderBy(input => input.Value).Last().Key;
|
|
|
|
|
Genius!!
I so love generics!!! Thanks professor!
Jammer
Going where everyone here has gone before!
|
|
|
|
|
Keep in mind the good professor's solution will throw an exception if the dictionary is empty, see the Last() extension method[^] used there. You may want to tweak that code a tad to account for empty dictionaries.
|
|
|
|
|
Ok, I'm stuck on something else with this dictionary malarky now. Once I've done an evaluation and worked out the highest value in my dictionary and grabbed the string I need to reset all the values in the dictionary to zero.
I'm getting errors at the moment saying that the collection has been modified and that it can't enumerate over the collection. So far I've tried:
Dictionary<string, int="">.KeyCollection keycoll = FileScore.Keys;
foreach (string s in keycoll)
{
FileScore[s] = 0;
}</string,>
Which fails on the second loop ...
and I've tried:
foreach (KeyValuePair<string, int=""> kvp in FileScore)
{
FileScore[kvp.Key] = 0;
}</string,>
How am I going to get around this problem of reinitialising the dictionary to hold all zero values?
Jammer
Going where everyone here has gone before!
|
|
|
|
|
Yeah, you can't modify a collection while iterating over it; kind of a chicken-and-egg problem.
One easy solution is to iterate over a copy the collection and modify the original:
foreach (var item in dictionary.ToArray())
{
dictionary[item.Key] = 0;
}
|
|
|
|
|
That is a bit of a bind isn't it ... I'm just rewriting my code with no dictionary. I'm trying to shoehorn functionality out of the wrong approach basically ...
I've just defined a new collection and I'm going to use a List<t> instead. I'm sure I'll find some problems along the way
Jammer
Going where everyone here has gone before!
|
|
|
|
|
After some futzing around i'm going to do this I think. I'm performing this each time:
Dictionary<string, int> FileScoreCopy = new Dictionary<string, int>(FileScore);
Just out of interest. How do you 'delete' this FileScoreCopy once your done with it? I guess some form of proactive garbage collection.
Jammer
Going where everyone here has gone before!
|
|
|
|
|
You don't delete it. When it goes out of scope, it automatically becomes eligible for garbage collection. The .NET garbage collector will reclaim the memory reserved for this object when it runs in the background.
|
|
|
|
|
OK. I need to look into what a destructor is then as that's what I thought they were for.
Thanks,
Jammer
Going where everyone here has gone before!
|
|
|
|
|
Nope, a destructor is only required if you're dealing with unmanaged resources (e.g. closing Win32 files, closing database connections, etc.). For regular managed code where you're not dealing with unmanaged resources, you don't need to implement a destructor.
|
|
|
|
|
Ahhhhhh, that makes total sense now.
I was reading about the generations in the GC the other day ... all very interesting! Much to learn!
Jammer
Going where everyone here has gone before!
|
|
|
|
|
Hi i had a discussion with my friend about OOP and now i want to ask some of you.
The question is:
Knows a file how it can be printed or knows a printer how it can print a file ?
or
Knows a car how it can be repaired or knows a car repair shop how it can repair a car?
or
Knows a clothes how it can be washed or knows a washmaschine how it can wash a clothes
or generally
when have a class a specific ability on its own and
when have only another class a specific ability and need another class to do it
according to a example above:
File.Print( ) or Printer.Print( File ) ?
Car.Repair( ) or CarRepairShop.Repair( Car ) ?
Clothes.Wash( ) or WashMaschine.Wash( Clothes ) ?
|
|
|
|
|
MarkPhB wrote: File.Print( ) or Printer.Print( File ) ?
Car.Repair( ) or CarRepairShop.Repair( Car ) ?
Clothes.Wash( ) or WashMaschine.Wash( Clothes ) ?
My opinion:
- neither, usually a printer doesn't care about the document being sent to him, you'd have to convert any object (file, bitmap, text) to a format the printer can actually print (raw bitmap e.g.)
- CarRepairShop.Repair( Car )
- WashMaschine.Wash( Clothes )
Objects like files, cars, clothes etc. have some properties on their own, but they usually don't have any abilities. A car probably doesn't know how to repair itself, but due to some given properties it may know how it should be accelerated, so Car.Accelerate() might be okay in some circumstances.
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
yea thats my opinion too
but my friend say: "Only the class knows what it can be done with it"
for his example: "An object knows how it can be saved in a database".
So he means: Object.Save() and not Database.Save( Object )
|
|
|
|
|
Then you, me and the .NET framework disagree with your friend
Object.Save() makes no sense because where should the object save itself to? A database connection, a file system, over network? The object doesn't know about either of the available streams.
Also, saving an object depends on the place being stored to. For a database it would be a SQLConnection, for the hard disk it would be a FileStream, for network a NetworkStream. So only the streams themselves know how to execute the proper Save() operation.
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Thx, i knew i was right =)
|
|
|
|
|
Your friend's ideas are not really OOP, because he wants to create monolithic classes that know how to do every aspect of any operation that involves them.
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 )
|
|
|
|
|
HI,
iv'e build an sql Server in SQL Server 2005 Express
and noticed that i do not have the abilty to Manage the Server Notification Services
in The SQL Server 2005 Express.
Is there any way to do this and if not is there another way to Notify
The App About Changes (and not with a thread that will ReFill the Data)?
HELP, Please
THANKS
Have Fun
Never forget it
|
|
|
|
|
As you can see here[^] Notification Services are not available in SQL Express.
only two letters away from being an asset
|
|
|
|
|
THANKS i'll Try Another way
Have Fun
Never forget it
|
|
|
|
|
Hi All,
I'm a little confused at the moment as to why these two apparently 'the same' situations don't work in my code. In this example all works as wanted:
public FileInformation(string filename)
{
FileInfo info = new FileInfo(filename);
_fileName = info.Name;
_fileSize = (info.Length / 1024).ToString() + "KB";
_fileExt = info.Extension.ToUpper();
_fileDate = info.LastWriteTime;
_path = info.DirectoryName;
foreach (DataRow ThisRow in ExtLookUpDS.Tables["ext_look_up"].Rows)
{
if (_fileExt == ThisRow[0].ToString().Trim())
{
_compFormat = Boolean.Parse(ThisRow[1].ToString().Trim());
_midiFormat = Boolean.Parse(ThisRow[2].ToString().Trim());
_audioApp = Boolean.Parse(ThisRow[3].ToString().Trim());
_desc = ThisRow[4].ToString().Trim();
}
}
}
which calls this when it hits the ExtLookUpDS:
private DataSet dsExtensions;
private DataSet ExtLookUpDS
{
get
{
if (dsExtensions == null)
{
dsExtensions = BuildLookups.LoadXmlFile(@"LookUpXML\ext_look_up.xml");
}
return dsExtensions;
}
}
But in this following scenario I'm getting the error "An object reference is required for the non-static field, method, or property" but it compiles ok ...
public void AnalyseTheFilePath(string pathtoanalyse)
{
Regex wordsplitter = new Regex("\\b\\w+\\b",RegexOptions.IgnoreCase);
foreach (Match pathword in wordsplitter.Matches(pathtoanalyse))
{
foreach (DataRow ThisRow in InstrumentsDS.Tables["instrument_lookup"].Rows)
{
if (pathword.ToString() == ThisRow[0].ToString().Trim())
{
}
}
}
}
private DataSet dsInstruments;
private DataSet InstrumentsDS
{
get
{
if (dsInstruments == null)
{
dsInstruments = BuildLookups.LoadXmlFile(@"LookUpXML\instrument_lookup.xml");
}
return dsInstruments;
}
}
I've been trying various things but I'm really butting up against the limits of what I know about C# in order to solve this one at the moment. What am I doing wrong / different in this second example to create this error?
Thanks in advance,
Jammer
Going where everyone here has gone before!
|
|
|
|
|
Ok, its something to do with creating an instance of dsInstruments isn't it ... ?? Adding in:
DataSet InstrumentsDS = new DataSet();
public void AnalyseTheFilePath(string pathtoanalyse)
{
Regex wordsplitter = new Regex("\\b\\w+\\b",RegexOptions.IgnoreCase);
DataSet InstrumentsDS = new DataSet();
foreach (Match pathword in wordsplitter.Matches(pathtoanalyse))
{
foreach (DataRow ThisRow in InstrumentsDS.Tables["instrument_lookup"].Rows)
{
if (pathword.ToString() == ThisRow[0].ToString().Trim())
{
}
}
}
}
Fixes the referencing problem but doesn't actually build the dataset and I don't want to build a new instance of dataset everytime the method AnalyseTheFilePath() is called ...
sheesh ... this is driving me nuts. There is a lot to learn in C# ...
Jammer
Going where everyone here has gone before!
|
|
|
|