webForumDet fria alternativet

Recent lista

8 svar · 308 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Jag har hittat lite koder på att göra en resent-lista, som fungerar bra.
Programmeraren hadde dock "glömt" att skicka med koden för att skriva in i registret, så det fick jag ta hand om själv:

public void SparaMenu(string shortName,string fFilNamn)
		{//denna har jag gjort själv
			RegistryKey regKey = Registry.CurrentUser.CreateSubKey("Software\\SAW\\Music_Translater\\ProjectMRUList");
			regKey.SetValue(shortName, fFilNamn);
		}

Som denna är nu, så kan ju listan bli hur lång som helst, frågan är
hur gör jag för att begränsa antalet filer. Jag misstänker att det rätta är att göra det när man skriver till registret, inte när man skall hämta.

Skulle jag grunna på att ta med ett datum kanske och sortera bort därefter? I såfall hur? :q

renholmMedlem sedan apr. 20012 266 inlägg
#2

Är väl egentligen bara att skapa t.ex nycklarna A,B,C,D,E osv och sedan kontrollerar din kod om alla "slots" är fylld, i fall de är de så tas värdet ur E bort och alla flyttas ner ett steg A-B, B-C osv.

sawMedlem sedan mars 20011 880 inlägg
#3

Jag måste nog be om hjälp, jag har lite svårt för det här.
Problemet är ju att flytta ner.
Jag har börjat på ett litet experiment här:

string  nyText = textBox1.Text;
string 	oldEtt=   namn[0];
string 	oldTvå=   namn[1];
string 	oldTre=   namn[2];
string 	oldFyra=  namn[3];					

namn[0]= nyText;
namn[1]= oldEtt;
namn[2]= oldTvå;
namn[3]= oldTre;
namn[4]= oldFyra;

men det blir ju helt galet.
Det var ju tänkt att om man fyller i textboxen(jag testar med den)
så skall ju det hela flyttas ett steg ner. Som detta är så flyttas
bara den första, och ingenting mera.

Vad missar jag?

Marcus EMedlem sedan maj 20021 466 inlägg
#4

Lägg allt i en ArrayList och kör en Insert i början.

sawMedlem sedan mars 20011 880 inlägg
#5

Hej Marcus, jag har inte jobbat så mycket med Arrayer, hur menar du med en insert?

sawMedlem sedan mars 20011 880 inlägg
#6

Jag är en bit på vägen, men jag kan bara flytta ner ett steg.

listBox1.Items.Clear(); 
 				System.Collections.ArrayList minArrayList;
				minArrayList = new ArrayList(4);
				
				 a = "Benni";
				 b = "Johan";
				 c = "Dennis";
				 d = "Krille";  				

				minArrayList.Add(a);
				minArrayList.Add(b);
				minArrayList.Add(c);
				minArrayList.Add(d);
				
				if(textBox1.Text !="")
				{ 
					minArrayList.Contains(5);
					minArrayList.Clear();
					minArrayList.Add(textBox1.Text);
					minArrayList.Add(a);
					minArrayList.Add(b);
					minArrayList.Add(c);
					for(int i =0;i<	minArrayList.Count;i++)
					{
						listBox1.Items.Add(minArrayList[i]);
					}

				}

om jag gör en insert till, så med denna koden så ändras bara den
första. Hur bör jag fortsätta?

PhorpherMedlem sedan feb. 20002 300 inlägg
#7
public const int MAX_RECENT = 5;

private ArrayList myArray = new ArrayList(MAX_RECENT); // ArrayList med tidigare filer...

...

AddRecent(TextBox1.text); // Lägg till senast använda "fil".
...

public void AddRecent(string latest)
{
    myArray.Insert(0, latest);

    if(myArray.Count > MAX_RECENT)
       myArray.RemoveAt(MAX_RECENT);
}
sawMedlem sedan mars 20011 880 inlägg
#8

Helt underbart, tack för hjälpen.
Nu återstår att se om jag lyckas med att få in detta i skarp vertion.
Tänkt är att detta skall vara till min recentlista, jag antar att jag bör ta bort nycklarna när jag väl har hämtat min arraylist?

sawMedlem sedan mars 20011 880 inlägg
#9

Det finns ett par saker som inte fungerar bra.

  1. Av någon anledning så lyckas jag inte med att ta bort nycklen
    i registret.
  2. Det kanske hör ihop med förra, men jag ville ju helst att den filen som öppnades sist, också får det lägsta Arraynr(kanske det inte heter)

Om ni ville slå en blick här:

public void SparaMenu(string fFilNamn)
{//registrering för öppnade filer
FileInfo finfo1; 
Info.Text= fFilNamn + " är nu registrerad";
RegistryKey regKey = Registry.CurrentUser.OpenSubKey
("Software\\SAW\\Music_Translater\\ProjectMRUList");
	
if (regKey == null)
{
 return;
}  			
myArray = new ArrayList();	
String[] filename = regKey.GetValueNames(); 
IEnumerator iEnum = filename.GetEnumerator();
// Iterate through all items				
			 
while(iEnum.MoveNext())
{
String val = (String)iEnum.Current;
String data = (String)regKey.GetValue(val);
myArray.Add(data); 			
}
AddRecent(fFilNamn);
myArray.Sort( 1, 3, null );//*******
regKey.DeleteSubKey("Software\\SAW\\Music_Translater\\ProjectMRUList",false);
regKey = Registry.CurrentUser.CreateSubKey("Software\\SAW\\Music_Translater\\ProjectMRUList");

for(int i =0;i<	myArray.Count;i++)
{
finfo1 = new FileInfo(myArray[i].ToString());
regKey.SetValue(finfo1.Name,myArray[i]);
}			
regKey.Close(); 
			
}

Vad som händer är följande, ingen delete i registret och heller ingen sortering.
Tacksam för hjälp.

139 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)