En kryptisk titel, men det närmaste jag kan komma. Kan du inte lgga dem i en hashtable? Där kan du ju ha en nyckel (t.ex. en sträng) och hämta ut instansen via den nyckeln. <b>Vad menar du??(språket? tonen?)</b> Per, allt är ok Du behöver bara en Nu hoppas jag att jag gör rätt, men jag får error. Du använder pianoKeys två gånger som olika objekt... nedanstående borde fungera bättre: Det djäklas här... Ok, nu tror jag jag fattar vad du är ute efter... Ok, jag skall försöka att andra PianoKey, men...Komma åt en speciell sharp.
I en piano klaviatur har jag lagt in ett antal sharp(kommer ifrån en kille som har byggt ganska så snygga sharps, Multimedia.UI.PianoKey pianoKey heter de).
Jag har namngivet dem som:
pianoKeyC
pianoKeyCiss
pianoKeyD
osv
Det rör sig om 69 st(ganska så många)
För att använda den så
pianoKey.TurnKeyOn(); (då visas den nertryckt)
Ifrån en sub så får jag ett värde(C,D osv)
Men hur i hela friden skall jag få till det utan att behöva skriva en jättelång ifsats???
Jag har försökt med
<code>
Multimedia.UI.PianoKey pianoKey & Forsta = new Multimedia.UI.PianoKey();
</code> där Forsta innehåller tonnamnet (C t ex), men jag får bara fel.
Tacksam för hjälpSv: Komma åt en speciell sharp.
Typ
System.Collections.Hashtable pianoKeys=new System.Collections.Hashtable();
piankoKeys["C"]=new Multimedia.UI.PianoKey();
sen för att hämta ut kan du bara göra:
Multimedia.UI.PianoKey pianoKey=(Multimedia.UI.PianoKey)piankoKeys["C"];
Eller missuppfattade jag dig?
Sv: Komma åt en speciell sharp.
Både-och eller ingendera... Språkets namn är ju en ordlek: C# = ciss = 'C sharp' på engelska = "skarp C"
Skrev inlägget med glimten i ögat då tråden handlade om toner och programmering...Sv:Komma åt en speciell sharp.
Johan, om jag har förståt dig rätt, så skall jag först lägga in
<code>
System.Collections.Hashtable pianoKeys=new System.Collections.Hashtable();
piankoKeys["C"]=new Multimedia.UI.PianoKey();
</code>, kanske när jag starta appen.
Sedan, efterson i variablen Forsta redan finns en ton (C,C# osv) så borde det väll räcka med
<code>
Multimedia.UI.PianoKey pianoKey=(Multimedia.UI.PianoKey)piankoKeys[Forsta];
</code>
Har jag uppfatta dig rätt?
När det gäller Hachtabelen måste jag köra
<code>
System.Collections.Hashtable pianoKeys=new System.Collections.Hashtable();
</code> för varje ton(det är över 60 toner), eller kan jag bara lägga till tornerna efter varandra?Sv: Komma åt en speciell sharp.
<code>
Multimedia.UI.PianoKey pianoKey=(Multimedia.UI.PianoKey)piankoKeys[Forsta];
</code>
och sedan en
<code>
piankoKeys["C"]=new Multimedia.UI.PianoKey();
</code>
för varje ton.Sv:Komma åt en speciell sharp.
<code>
System.Collections.Hashtable pianoKeys=new System.Collections.Hashtable();
pianoKeys["C"] =new Multimedia.UI.PianoKey();
pianoKeys["Ciss"]=new Multimedia.UI.PianoKey();
pianoKeys["D"] =new Multimedia.UI.PianoKey();
</code>
Sedan när jag skall använda mig av det:
<code>
Multimedia.UI.PianoKey pianoKeys=(Multimedia.UI.PianoKey)pianoKeys[Forsta];
pianoKeys.TurnKeyOn();
string Andra= Music_Translate.Class1.OmvandTalTillAckord(Tva);
Multimedia.UI.PianoKey pianoKeys=(Multimedia.UI.PianoKey)piankoKeys[Andra];
pianoKeys.TurnKeyOn();
string Tredje= Music_Translate.Class1.OmvandTalTillAckord(Tre);
Multimedia.UI.PianoKey pianoKeys=(Multimedia.UI.PianoKey)piankoKeys[Tredje];
pianoKeys.TurnKeyOn();
string Fjarde= Music_Translate.Class1.OmvandTalTillAckord(Fyra);
Multimedia.UI.PianoKey pianoKeys=(Multimedia.UI.PianoKey)piankoKeys[Fjarde];
pianoKeys.TurnKeyOn();
</code>
Det var väll så det föreslogs.
Error:
<code>
E:\C#\Music_Translater\Music_Translater\Music_Translate\Form1.cs(5527): Cannot apply indexing with [] to an expression of type 'Multimedia.UI.PianoKey'
</code>
Är det kört med denna metoden?Sv: Komma åt en speciell sharp.
System.Collections.Hashtable pianoKeys=new System.Collections.Hashtable();
pianoKeys["C"] =new Multimedia.UI.PianoKey();
pianoKeys["Ciss"]=new Multimedia.UI.PianoKey();
pianoKeys["D"] =new Multimedia.UI.PianoKey();
Multimedia.UI.PianoKey pianoKey=(Multimedia.UI.PianoKey)pianoKeys[Forsta];
pianoKey.TurnKeyOn();
string Andra= Music_Translate.Class1.OmvandTalTillAckord(Tva);
pianoKey=(Multimedia.UI.PianoKey)piankoKeys[Andra];
pianoKey.TurnKeyOn();
string Tredje= Music_Translate.Class1.OmvandTalTillAckord(Tre);
pianoKey=(Multimedia.UI.PianoKey)piankoKeys[Tredje];
pianoKey.TurnKeyOn();
string Fjarde= Music_Translate.Class1.OmvandTalTillAckord(Fyra);
pianoKey=(Multimedia.UI.PianoKey)piankoKeys[Fjarde];
pianoKey.TurnKeyOn();
Sv:Komma åt en speciell sharp.
Under class Form1 ligger(VS har skrivit)
<code>
private Multimedia.UI.PianoKey pianoKeyC5;
private Multimedia.UI.PianoKey pianoKeyB4;
private Multimedia.UI.PianoKey pianoKeyA4iss;
private Multimedia.UI.PianoKey pianoKeyA4;
private Multimedia.UI.PianoKey pianoKeyG4iss; osv
</code>
Därefter, precis under
InitializeComponent();
har jag lagt in det första..
<code>
System.Collections.Hashtable pianoKeys=new System.Collections.Hashtable();
pianoKeys["C"]=new Multimedia.UI.PianoKey();
pianoKeys["Ciss"]=new Multimedia.UI.PianoKey();
</code>
Senare i classen AkordsTecken
<code>
string Forsta;
Multimedia.UI.PianoKey pianoKey=(Multimedia.UI.PianoKey)pianoKeys[Forsta];
pianoKey.TurnKeyOn();
osv
</code>
OBS i vissa fall står det ju pianoKeys i andra pianoKey(det har du kanske räknat med?)
Error:
<code>
E:\C#\Music_Translater\Music_Translater\Music_Translate\Form1.cs(5526): The name 'pianoKeys' does not exist in the class or namespace 'Music_Translate.Form1'
</code>
Tydligen så måste jag deklarera 'pianoKeys' till någonting men till vad?Sv: Komma åt en speciell sharp.
Du kan inte skapa nya pianokeys utan du måste ju använda de som VS genererat för dig. Antagligen får du manuellt lägga in varje PianoKey i en collection (t.ex. en hashtable) typ:
pianoKeys["B4"]=pianoKeyB4; (obs görs efter initialiserng)
Du måste dessutom deklarera din hashtable som en klassvariabel för att du skall kunna nå den överallt i din klass.
Det andra alternativet är ju precis som du ville göra i början (hämta en instance med ett viss namn) men jag tror inte att du kan göra så i C#...Sv:Komma åt en speciell sharp.
>Du måste dessutom deklarera din hashtable som en klassvariabel
Hur gör jag det rätt?
[REDIGERAT]
NU HAR JAG LYCKATS.
Så här gjorde jag:
<code>
private Multimedia.UI.PianoKey[] Tangent;
Tangent = new Multimedia.UI.PianoKey[336];
Tangent[40]=pianoKeyC;
Tangent[45]=pianoKeyCiss;
Tangent[50]=pianoKeyD;
Tangent[55]=pianoKeyDiss;
osv
Tangent[Ett].TurnKeyOn();
Tangent[Tva].TurnKeyOn();
Tangent[Tre].TurnKeyOn();
Tangent[Fyra].TurnKeyOn();
//Ett Tva Tre Fyra innehåller ett tal motsvarande tangent t ex 40
//Och sedan för att rännsa
for(int i = 40; i< 335;)
{
try
{
Tangent[i].TurnKeyOff();
i=i +5;
}
catch{}
}
</code>
Tack alla ni som har försökt att hjälpa mig.