webForumDet fria alternativet

Läsa in sparade inställinga till treeView

.NET

8 svar · 581 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag försöker att läsa in inställningarna ifrån registret för att applicera dem på treeView

RegistryKey pRegKey = Registry.LocalMachine;
				
pRegKey = pRegKey.OpenSubKey("Software\\IdrottsPortalen");

Object val = pRegKey.GetValue("Län"); 
                    if(val !=null) 
                    { 
                        
treeView1.SelectedNode.Parent.Index = Convert.ToInt32(val); 
                        
val = pRegKey.GetValue("Kommun"); 
                        
val=Convert.ToInt32(val); 
                        
treeView1.SelectedNode.Index =   Convert.ToInt32(val);                        
                    }

Error:

E:\IdrottsPortalen\IdrottsPortalen\Län_Kommun.cs(252): 

Property or indexer 'System.Windows.Forms.TreeNode.Index'
 cannot be assigned to -- it is read only

Jag har krabbat och sökt överallt men inte hittat något svar. :q

Medlem sedan dec. 2000399 inlägg
#2

Du får inte tilldela treeView1.SelectedNode.Index något eftersom den endast får läsas, precis som felmeddelandet säger. Det verkar som om du vill att den nod med ens egen stad skall bli markerad. Kolla den här tråden så borde du få en ledtråd: http://www.webforum.nu/showthread.php?s=&threadid=89916&goto=nextnewest&forumid=29

Medlem sedan mars 20011 880 inlägg
#3

Hej men någonting är galet, för jag kommer inte till den avsedda platsen

Medlem sedan dec. 2000399 inlägg
#4

Hmm, här kommer den igen (det är den föregående tråden!): http://www.webforum.nu/showthread.php?s=&threadid=89841&forumid=29

Medlem sedan mars 20011 880 inlägg
#5

Tack juventus1 men jag förstår inte hur jag skall använda mig av den.
Jag skall ju inte skapa någon ny node, jag ville ju expandera noden.

Medlem sedan juni 20022 599 inlägg
#6

Gissar hejvilt eftersom jag egentligen inte förstår vad du vill göra:

// ..
treeView1.Nodes[Convert.ToInt32(val)].ExpandAll();
val = pRegKey.GetValue("Kommun"); 
treeView1.SelectedNode = treeView1.Nodes[Convert.ToInt32(val)];
// ..

??

Medlem sedan mars 20011 880 inlägg
#7

Hej niko.
Vi tar det väll ifrån början, Jag har mixrat så mycket med det här nu så risken finns tt jag har blandat bort mina koder.
Jag har på min form en treeView som visar län. Som undernode så visar den de kommuner som finns i alla län.
Vad jag ville är att treeView skall markera den posten som jag var inne på sist när jag startar programmet igen.
Jag sparar till registret så här:

RegistryKey key = Registry.LocalMachine.OpenSubKey("Software", true);				
				
RegistryKey newkey = key.CreateSubKey("IdrottsPortalen");
				
				
newkey.SetValue("Län", ParentNode);
				
newkey.SetValue("Kommun", ChildNode);

Sen läser jag in så här:

RegistryKey pRegKey = Registry.LocalMachine;
pRegKey = pRegKey.OpenSubKey("Software\\IdrottsPortalen");
Object lan=pRegKey.GetValue("Län");//.ToString();			
for(int i=0;i<treeView1.Nodes.Count;i++)
{ 		
if(treeView1.Nodes[i].Text==lan.ToString()) 
{ 	
this.treeView1.Nodes[i].Expand(); 
treeView1.Nodes[Convert.ToInt32(val)].ExpandAll();
val = pRegKey.GetValue("Kommun"); 
treeView1.SelectedNode = treeView1.Nodes[Convert.ToInt32(val)];		
} 	
}

Jag får inga felmedelanden, men treeView "rör" sig inte.
Går inte detta att ordna?

Medlem sedan juni 20022 599 inlägg
#8

Sparar du strängar i registret nu? Om du sparar indextalen istället så borde det inte bli konstigare än så här:

treeView1.Nodes[lanIndex].Expand();
treeView1.SelectedNode=treeView1.Nodes[lanIndex].Nodes[kommunIndex];
treeView1.Focus();

Om lanIndex och kommunIndex är talen du hämtat från registret och länsnoderna är toppnoder. Om dom i sin tur har noder ovanför sig så blir det så klart annorlunda.

Medlem sedan mars 20011 880 inlägg
#9

Det ser ut så här nu:

RegistryKey pRegKey = Registry.LocalMachine;	
pRegKey = pRegKey.OpenSubKey("Software\\IdrottsPortalen");
Object spara = pRegKey.GetValue("Spara Inställningar");
if(spara !=null)		
{			
if(spara.ToString()=="Ja")		
{
Object indexLan = pRegKey.GetValue("Län");
if(indexLan !=null)
{
Object indexKommun = pRegKey.GetValue("Kommun"); treeView1.Nodes[indexLan].Expand();
treeView1.SelectedNode=treeView1.Nodes[indexLan].Nodes[indexKommun];treeView1.Focus();

Felmedelande:

E:\IdrottsPortalen\IdrottsPortalen\Län_Kommun.cs(275): 
The best overloaded method match
 for 'System.Windows.Forms.TreeNodeCollection.this[int]' has
 some invalid arguments

E:\IdrottsPortalen\IdrottsPortalen\Län_Kommun.cs(275):
 Argument '1': cannot convert from 'object' to 'int'

Några bra förslag?
PS
När jag först testade din kod, så skrev jag in siffror direkt, och det fungerade kanbra, fyra gånger sen ville den inte längre.
:q
[REDIGERAT]
Jag använde mig av Convert.ToInt32(indexLan)].Expand();
ock fick följande fel

An unhandled exception of 
type 'System.ComponentModel.Win32Exception' occurred in 
system.windows.forms.dll

Additional information: Det gick inte att skapa fönsterreferensen.

Detta fel uppkommer i mitt MDI-formulär.
Hur kommer jag förbi det?

261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)