|
Just needed a higher macromedia flash version on my IE!
|
|
|
|
|
I am storing card displays (eg J♣) in a list box through a list <KeyValuePair<string, int> and I want to order the cards numerically from greatest value to smallest value in the list box. When I change the sorting property on the properties box to "descending", the list is sorted inverse-alphabetically (ie Q is at top and 10 is at the bottom). I want to sort the list descending numerically, by value, so that A is at the top and 2 is at the bottom. How can I do this?
|
|
|
|
|
Here is one way MSDN - ListBox.Sort Method[^].
Alternatively you can put your string and int into a class and implement the IComparable interface. Then, possibly, put them into a collection to add via the ListBox.DataSource property
Henry Minute
Do not read medical books! You could die of a misprint. - Mark Twain
Girl: (staring) "Why do you need an icy cucumber?"
“I want to report a fraud. The government is lying to us all.”
|
|
|
|
|
You can implement a custom type for Card s and override the CompareTo() method to implement custom sorting. Something like:
internal enum CardSuits
{
Spades = 0,
Hearts,
Diamonds,
Clubs
}
internal enum CardValues
{
Two = 0,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
Queen,
King,
Ace
}
internal class Card : IComparable
{
internal CardSuits Suit;
internal CardValues Value;
internal Card(CardSuits Suit, CardValues Value)
{
this.Suit = Suit;
this.Value = Value;
}
public int CompareTo(object obj)
{
int MyValue = (int)Value;
Card OtherCard = (Card)obj;
int OtherValue = (int)OtherCard.Value;
return MyValue.CompareTo(OtherValue);
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
switch (Value)
{
case CardValues.Two:
sb.Append("Two");
break;
case CardValues.Three:
sb.Append("Three");
break;
case CardValues.Four:
sb.Append("Four");
break;
case CardValues.Five:
sb.Append("Five");
break;
case CardValues.Six:
sb.Append("Six");
break;
case CardValues.Seven:
sb.Append("Seven");
break;
case CardValues.Eight:
sb.Append("Eight");
break;
case CardValues.Nine:
sb.Append("Nine");
break;
case CardValues.Ten:
sb.Append("Ten");
break;
case CardValues.Jack:
sb.Append("Jack");
break;
case CardValues.Queen:
sb.Append("Queen");
break;
case CardValues.King:
sb.Append("King");
break;
case CardValues.Ace:
sb.Append("Ace");
break;
default:
sb.Append("???");
break;
}
sb.Append(" of ");
switch (Suit)
{
case CardSuits.Spades:
sb.Append("Spades");
break;
case CardSuits.Hearts:
sb.Append("Hearts");
break;
case CardSuits.Diamonds:
sb.Append("Diamonds");
break;
case CardSuits.Clubs:
sb.Append("Clubs");
break;
default:
sb.Append("???");
break;
}
return sb.ToString();
}
}
...
List<Card>CardList = new List<Card>();
CardList.Add(new Card(CardSuits.Hearts, CardValues.Three));
CardList.Add(new Card(CardSuits.Clubs, CardValues.Queen));
CardList.Add(new Card(CardSuits.Diamonds, CardValues.Nine));
CardList.Add(new Card(CardSuits.Spades, CardValues.Ace));
CardList.Sort();
listBox1.DataSource = CardList;
2+2=5 for very large amounts of 2
(always loved that one hehe!)
|
|
|
|
|
Hi,
if your ListBox (or any other collection) contains items of type T , then you could provide an object implementing IComparer<T> and pass that to the Sort method.
All that interface takes is providing a simple method int Compare(T x, T y) in which you can implement any sorting order you like.
------------------------------------------------------------------------------
FWIW: you can edit and delete your own messages if you need to.
[EDIT]
Sorry, the above is insufficient, ListBox.Sort() does not take any parameters.
There are basically two ways of doing it:
1.
implement your own sort method; e.g. a bubble sort where you compare two items (in any way you see fit) and swap them if necessary.
2. better way:
use an intermediate collection, e.g. an array. This means:
- ListBox.Items.CopyTo(array,0) copies the items into an array
- ListBox.Items.Clear() removes the items
- Array.Sort(array, IComparer) sorts the items
- ListBox.Items.AddRange(array) adds them again, in the right order.
[/EDIT]
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
modified on Saturday, August 8, 2009 3:46 PM
|
|
|
|
|
I am storing card displays (eg J♣) in a list box through a list<keyvaluepair<string, int=""> and I want to order the cards numerically from greatest value to smallest value in the list box. When I change the sorting property on the properties box to "descending", the list is sorted inverse-alphabetically (ie Q is at top and 10 is at the bottom). I want to sort the list descending numerically, by value, so that A is at the top and 2 is at the bottom. How can I do this?
|
|
|
|
|
Hi,
I have following text data and i want to split and store into Arry list and DataSet or DataTable.
"MR ABC","BLOCK 25","CITY","COUNTRY"
THANK YOU
RIAZ
|
|
|
|
|
M Riaz Bashir wrote: "MR ABC","BLOCK 25","CITY","COUNTRY"
String StrText="MR ABC","BLOCK 25","CITY","COUNTRY";
string [] SplitText= strText.Split(',');
Now, SplitText is an string array which contain 4 element
SplitText[0]="MR ABC";
.
.
SplitText[3]="COUNTRY";
Now, you can store it easily in ArrayList or DataTable .
|
|
|
|
|
Abhijit Jana wrote: String StrText="MR ABC","BLOCK 25","CITY","COUNTRY";
string [] SplitText= strText.Split(',');
Now, SplitText is an string array which contain 4 element
Not quite, you cannot allocate a string as
="ABC", "DEF" as there is not such C# syntax. Replace with:
string strText="\"MR ABC\",\"BLOCK 25\",\"CITY\",\"COUNTRY\"";
string [] SplitText= strText.Split(',');
No trees were harmed in the sending of this message; however, a significant number of electrons were slightly inconvenienced.
This message is made of fully recyclable Zeros and Ones
|
|
|
|
|
OriginalGriff wrote: string strText="\"MR ABC\",\"BLOCK 25\",\"CITY\",\"COUNTRY\"";
Yeah. you are right. Actually I didn't concentrate on that part. It should like that you said. That was my silly mistake.
Thanks for correcting me
|
|
|
|
|
Bashir..I guess your question is your answer..You mentioned -
M Riaz Bashir wrote: text data and i want to split
So just check out the Split method of String.
|
|
|
|
|
This article [^]may be of use. You need to be careful of additional commas in the data and when to remove the double quotes.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
I Just make a formula for....
sum({Invoice.Cost}
but it gives an error....
A Number filed or currency Amount field is required here.
|
|
|
|
|
Hi friends,
what is the best way to implement given requirement.
I need to open multiple forms in multiple tabpages control and save it on application exit and reload it on Application starts.
Thanking you,
modified on Saturday, August 8, 2009 2:42 AM
|
|
|
|
|
If your forms have a serializable model (a type that holds each form's state), serialize and persist it when application exits. This can be deserialized for restoring the state when application starts next time.
Other way is to manually persist all the information that needs to be restored. You can use any kind of persisting mechanisms.
|
|
|
|
|
In my application, I do the same thing. I save only the location and size of forms.
|
|
|
|
|
As you want to save the layout,create a base form and inherit all the forms.
Now for saving layout you can have a single utility class which would take the base form as parameter to serialize.So while eixiting the application pass your forms instance to serialize. Do the unserialization while application start.
I can suggest you a thrid party (if budget permits ) DevExprss [^]controls which might be helpful in this.
|
|
|
|
|
Dear Arindam
Thanks,
I do the same thing but i am unable to serialize class as it contains
property of type TabControl.
|
|
|
|
|
|
Hi Shakti,
Today got sometime and posted one article [^]which might help you.
Keep me posted if this helps.
|
|
|
|
|
Dear Arindam,
Application settings are read-Only
we cant assign value to them.
UserPreferenceSample.Settings defaultSettings= new Settings();
defaultSettings.FormForeColor = this.ForeColor;
This code ll give design time error.
Property or indexer 'project...' cannot be assigned to -- it is read only
if it is possible to assign value to application settings than please let me know how.?
Thanking you
|
|
|
|
|
shaktisinh wrote: Application settings are read-Only
we cant assign value to them.
Did you go through my article? I think it was clearly mentioned how the User Preferences can saved in Application Settings. Also, I have provided a sample application with source code. You can simulate the same thing there.
shaktisinh wrote: UserPreferenceSample.Settings defaultSettings= new Settings();
defaultSettings.FormForeColor = this.ForeColor;
Yes..It was a typo. I have modified the code in the article[^]. I have posted the updated article[^] in CodeProject also.
But I guess you have not opened my source code yet . There you should have got the proper code. Keep me posted on this. if this resolves your problem
|
|
|
|
|
And I thought my work was irrelevant. Try this article[^].
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
well im having listview problems.
my code is not letting me display a variable in listview subitem[3]
displaying the same varible in subitem[0] or [1] or [2] works fine, just 3 and onwards.
it says the index is out of range.
ive tried everything i can think of :S
heres my code:
public void button1_Click(object sender, EventArgs e)
{
{
int iCount = lvAccounts.Items.Count;
ListViewItem[] accUserPass = new ListViewItem[iCount];
lvAccounts.Items.CopyTo(accUserPass, 0);
for (int i = 0; i < accUserPass.Length; i++)
{
foreach (ListViewItem item in lvAccounts.Items)
{
// i defined my variables here
accUserPass[i].SubItems[2].Text = sec;
accUserPass[i].SubItems[3].Text = validpro;
}
}
ive manually defines column headers:
public RapidCheck()
{
InitializeComponent();
lvAccounts.Columns.Add("Login", 80, HorizontalAlignment.Left);
lvAccounts.Columns.Add("Password", 80, HorizontalAlignment.Left);
lvAccounts.Columns.Add("Security", 75, HorizontalAlignment.Left);
lvAccounts.Columns.Add("Expiry Date", 120, HorizontalAlignment.Left);
lvAccounts.Columns.Add("Rapidpoints", 80, HorizontalAlignment.Left);
lvAccounts.Columns.Add("Email", 80, HorizontalAlignment.Left);
lvAccounts.Columns.Add("Ref Points", 80, HorizontalAlignment.Left);
lvAccounts.Columns.Add("Files", 50, HorizontalAlignment.Left);
}
still not working :S
please help
|
|
|
|
|
You are asking to debug your code..
Anyway, from your code I can suggest some hint..
iNutR wrote: for (int i = 0; i < accUserPass.Length; i++)
{
foreach (ListViewItem item in lvAccounts.Items)
{
// i defined my variables here
accUserPass[i].SubItems[2].Text = sec;
accUserPass[i].SubItems[3].Text = validpro;
}
}
My observations -
1. Why do you need
for (int i = 0; i < accUserPass.Length; i++) ?
You already have inner foreach which should be enough.
2. If you use only one foreach (after removing the
for ), then you should use the
ListViewItem item instead of that array of things.
Keep me posted if this helps.
|
|
|
|
|