11. juli 2010 - 20:33Der er
9 kommentarer og 1 løsning
Tilgå variabler
Hey
Jeg er ved at være lidt rusten i c#. Når jeg nu engang har lavet en Form, hvor jeg laver en variabel "kredit" og har et panel hvor jeg loader en usercontrol, hvordan er det så jeg tilgå "kredit" fra min usercontrol.
Så vidt jeg husker, så skal jeg importere min Form til min usercontrol eller?
Det er egentlig ikke så god stil, at lade en usercontrol referere sin parent - afhængigheden bør være den anden vej. Altså, at din form kender til usercontrollen og ikke omvendt. Ellers vil ideen med at lave en control, der kan anvendes igen og igen jo ligesom gået fløjten.
Anyway - hvis du insisterer, så kan du gøre noget a'la det her i din user control:
(Vi siger, at din form hedder Form1)
Form1 f = this.FindForm() as Form1; if (f != null) { this.Kredit = f.Kredit; } else { //Håndter, at din parent form ikke er af typen Form1. }
---
Husk i øvrigt, at lave properties i stedet for variable i din form. Altså sådan ca.
Nu ved jeg ikke lige hvordan og hvorledes med din control. Hvis det er fordi den skal være den værdi som du får fra din form, i en eller anden textbox eller lign., så vil jeg mene at den skal være i control'en. Og så må du sætte værdien i Formen.
Altså i din user control:
public class MyControl : Control { [...] //ting som nu er i en control. private int credit; public int Credit { get {return int.Parse(textBoxCredit.Text)} set { if (textBoxCredit.Text != value) { textBoxCredit.Text = value; } } } }
Og så i din form:
public Form1() { InitializeComponent(); MyControl1.Credit = denVærdiDenNuSkalHave; }
Skal begge controls kunne både læse og opdatere? Og vil det være sådan, at hvis du redigerer værdien i den ene control, så skal det afspejle sig i den anden?
Anyway - til alle ting kan du bruge databinding. Men hvis begge controls kun viser værdien og ikke redigerer den, er det nok lidt overkill.
Hvis det er readonly så sæt værdien i din forms constructor eller en override af Load(), ligesom vist i min forrige post.
Hvis du skal have det til at fungere tovejs, så kan du kigge på databinding.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.