Hej! Det är inte mellan olika klasser du vill accessa dina egenskaper, det är mellan olika objekt. Visst har du rätt i att det är olika objekt; men även olika klasser i mitt fall. ;-) Som det är nu har du bara läsrättighter. lägg till "put" i propertyn också: set menar du, antar jag? :) Så här på rak arma så kommer jag bara på två sätt:Hur ändra i Form från annan klass?
Jag håller på med ett litet projekt för att lära mig C# och .NET i allmänhet, har tidigare bara kodat C/C++ med windows-APIt.
Nu är det så att jag har en Form (mainForm) med en del kontroller i; de flesta ligger inuti en egen kontroll (PropertyTree, se http://www.codeproject.com/cs/miscctrl/propertytree.asp).
Från den klassen kommer man förstås åt kontrollerna via this.kontrollNamn utan problem.
Men, om jag vill göra det från en annan klass, hur ska jag då bära mig åt?
För att vara mera specifik så handlar det om att läsa in inställningar (i en annan klass) och uppdatera formen enligt dem (värden i TextBoxar, vad som ska och inte ska vara ikryssat osv).
Jag har tänkt på detta både framifrån och bakifrån men jag kommer inte på någon smidig lösning.
Hjälp uppskattas!Sv: Hur ändra i Form från annan klass?
Exempel:
Jag har klasserna Form, TextBox och MinKlass, i mitt programs entrypoint så skapas ett objekt av typen Form med namnet MainForm. I MainForm skapas objektet ManipulerarTextBox av typen MinKlass och på objektet MainForm ligger ett objekt av typen TextBox med namnet TextLåda. För att objektet ManipulerarTextBox ska kunna nå objektet TextLåda så måste jag låta MainForm som äger båda objekten tilldela ManipulerarTextBox en referens till TextLåda.
När du gör ngt med this.kontrollNamn så är this den lokala referensen till ditt objekt, så i formuläret kan du t.ex. lägga till en property som ser ut så här:
public PropertyTree GetPropertyTree { get { return <namnet på ditt PropertyTree>; } }
Sedan kan du nå den propertien från alla de ställen du når formuläret.Sv:Hur ändra i Form från annan klass?
Förstår jag dig rätt att du menar såhär? I mainForm.Designer.cs (där VS.NET sparar all info/design av formen):
...
private WRM.Windows.Forms.PropertyPane ppHotkeys;
public WRM.Windows.Forms.PropertyPane ppHotKeys
{
get
{
return ppHotkeys;
}
}
...
Sedan i en annan klass/annat objekt:
public void EnFunktion()
{
mainForm.ppHotKeys.Controls.MinKontroll.Enabled = false;
}
Kod liknande den ovan fungerar iallafall inte, då den inte låter mig komma åt ppHotKeys (med stort K, som i propertien) från det andra objektet.
Jag antar att jag gör något fel, men vad?
Sv: Hur ändra i Form från annan klass?
public WRM.Windows.Forms.PropertyPane ppHotKeys
{
get
{
return ppHotkeys;
}
put
{
pphotkeys = value;
}
}Sv:Hur ändra i Form från annan klass?
Jag la till den också, men ingen skillnad. Jag tror dock att jag vet varför.
mainForm är ju namnet på klassen, i Program.cs skapas en instans av den:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new mainForm());
}
Alltså är det väl inte mainForm jag komma åt, utan instansen av den klassen som skapats... Eller hur?
Hur får jag tag på den isåfall?
Uppdatering: Jag har löst det!
Jag gjorde om konstruktorn till den andra klassen (OptionsInstance) till
...
mainForm main;
public class OptionsInstance (mainForm f)
{
this.main = f;
}
Sedan var det bara att använda den referensen.
Tack för era tips!
Sv: Hur ändra i Form från annan klass?
Det kanske mest klassiska sättet är att skicka med en referens till objectet ( i ditt fall formuläret) för att på så sätt komma åt de publika objekten.
Ett annat sätt är att använda sig utav events. Goolga lite så hittar du massa exempel. Kan startk rekomendera www.codeproject.com