19. december 2007 - 17:50Der er
8 kommentarer og 1 løsning
udskriv fra en form til en label i anden form
jeg er ved at lave en tekst editor:
jeg er har to forme
Forside: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace Notepad_v1 { public partial class Forside : Form { public Forside() { InitializeComponent(); }
og Underside: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO;
namespace Notepad_v1 { public partial class Underside : Form { string FileInfo; public Underside() {
nielle perfekt ;-) næsten rigtig kunne selv tilrette det sidste Bvli fik en error hved compileringen med et parameter der allerede eksisterede og kan ikke helt hitte din kode.... men ellers tak for hjælpen
Det er jo et spørgsmål om stil. Vil du være objektorienteret og have en løs kobling mellem dine objekter, eller vil du lave dirty workarounds, og eksponere dine private variable :)
Jeg holder selvfølgelig på det første (hvor din underside intet som helst aner om din forside).
Nu er jeg altså stor tilhænger af princippet om at man skal lære at kravle før man kan gå før man kan løbe. Derfor har jeg ikke nogen problemer med at anbefale en quick'n'dirty løsning frem for den store forkromede. :^)
Når det så er sagt kan jeg ikke lade være med at lade mig provokere af antydningen om at min løsning ikke skulle være rigtigt objektorienteret. Specielt ikke da jeg ikke kan afvise det helt. ;^)
Anyways, der er intet i OOP som siger at to klasser med alle midler skal være så løst koblet som overhovedet muligt. Faktisk lægger den givne problemstilling efter min mening heller ikke op til det: da Underside-klassen ikke rigtig har nogen eksistens berettigelse uden at være kaldt direkte fra Forside-klassen, vil jeg endda sige at der som udgangspunkt allerede er lagt op til en rimelig stærk binding imellem dem. Og det er netop den slags at access-modifieren internal er tænkt til.
I en rigtig løsning ville jeg dog selv foretrække at lave det uden at gøre selve label'en internal; i stedet ville jeg definere en property og tilgå label'en via denne:
namespace Notepad_v1 { public partial class Forside : Form { public Forside() { InitializeComponent(); }
internal string FileFullName { get { return this.FileFullName.Text; } set { this.FileFullName.Text = value; // Her kan man samtidig placere anden logik // som har med det at vælge en ny fil at gøre } } } }
namespace Notepad_v1 { private Forside parent;
public partial class Underside : Form { string FileInfo;
public Underside(Forside parent) { InitializeComponent();
Jeg ville nok foretrække at trække alle data som repræsentere den dims, som programmet skal arbejde på, ud som en helt selvstændig klasse. Adskille model og brugergrænseflade fra hinanden.
Bortset fra de overvejelser vil jeg give bvli ret i at teknikken med at bruge Events er vigtig at kende (ville dog definere min egen delegat specifikt til formålet). Jeg synes dog at den er en smule overkill her da der faktisk defacto ikke er tale om en meget løs binding mellem de to klasser.
PS: Jeg ville ikke selv bruge "FileInfo" som navnet på en streng på den måde der gøres i koden. Der findes allerede en klasse i System.IO med dette navn og der er ingen grund til at komme til at risikerer at komme til at blande de to ting sammen.
Jo da, jeg ventede egentlig bare på om der var nogen som havde kommentare til det jeg havde skrevet. :^)
... og et svar :^)
Synes godt om
Ny brugerNybegynder
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.