Avatar billede newbieatphp Nybegynder
11. juli 2010 - 20:33 Der 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?

Thanks
Avatar billede heinzdmx Nybegynder
11. juli 2010 - 20:55 #1
Hvis du sørger for at din variabel er enten:

public: alle kan læse den

protected internal: kan kun læses af programmet der kører. (vil jeg anbefale)

du skriver så f.eks.:

protected internal int kredit = 0;

og i din usercontrol, hvis din form hedder form1, og du vil lave en msgbox


Først en reference til formen:
Form1 form = new Form1();


MessageBox.Show(form.kredit.ToString());
Avatar billede newbieatphp Nybegynder
11. juli 2010 - 21:38 #2
Så snart jeg laver referencen:
Form1 form = new Form1();

og lige køre programmet, så vil den slet ikke vise min Form.
(F5 i VS)
Avatar billede heinzdmx Nybegynder
11. juli 2010 - 22:26 #3
Og din form hedder Form1?

Hmm.. hvilken fejlmeddelse?
Avatar billede bvli Praktikant
11. juli 2010 - 22:52 #4
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.

internal int Kredit {get; protected set;}
Avatar billede heinzdmx Nybegynder
11. juli 2010 - 22:57 #5
er ikke så meget inde i det med usercontrol...

Så din pointe er så at man i stedet bør lade variablen være i usercontrollen? eller hvordan?
Avatar billede bvli Praktikant
11. juli 2010 - 23:09 #6
Jo.

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;
}
Avatar billede newbieatphp Nybegynder
11. juli 2010 - 23:16 #7
Hey og tak for de indkommende kommentar.

Jeg har følgende opbygning:

En form.
Formen har tre panels.
I de to af panels har jeg to forskellige usercontrols, som begge gerne skulle kunne tilgå samme variable.

Det jeg lige kunne tænke på, var så at have den variabel i formen, men er der en smartere måde?
Avatar billede bvli Praktikant
11. juli 2010 - 23:36 #8
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.
Avatar billede newbieatphp Nybegynder
11. juli 2010 - 23:47 #9
Okay, tak for hjælpen. Jeg vil kigge lidt nærmere på det,

Smid et svar, og du vil modtage nogle point :)
Avatar billede bvli Praktikant
12. juli 2010 - 00:21 #10
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester