[C#] Variabelen/info van een form naar een ander

Pagina: 1
Acties:

  • thegve
  • Registratie: Februari 2004
  • Laatst online: 13-05 23:53
Beste heren, ik heb een probleempje met een windows programmaatje in c scherp. Ik ben bezig met een kookprogrammaatje, en als er dan op een item/recept gedubbelklikt word dan wil ik het recept in een nieuw form openen, o.a. te voorzien van een printknoppie enzo. Nou kan ik een nieuw venster openen, ik kan het 2e form wel inrichten, maar wat me niet lukt is de informatie van het geselecteerde item weer te geven, oftewel het juiste recept. Om een beetje een idee te geven van wat het is hierbij een screenie, in 256 kleuren bitmap, omdat deze windows nog beetje kaal is en paint nog niet voorzien is van jpeg ondersteuning.
Afbeeldingslocatie: http://www.hosingda.nl/naamloos.bmp
Edit:
Iemand dacht nog dat het handig was om de query te vermelden. Ut is de volgende : SELECT * FROM Recepten. Ik hoef toch niet zuinig te zijn met de resources, al was het natuurlijk wel netter geweest, maar dit zal mijn systemen niet platleggen..

[ Voor 16% gewijzigd door thegve op 01-07-2004 20:52 ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Terug naar de 1e bladzijde van je boek en niet met gui beginnen totdat je kan programmeren.

Verwijderd

Je zou een public property op je nieuwe venster moeten defineren en deze bij de open vanuit je eerste form moeten zetten.

  • thegve
  • Registratie: Februari 2004
  • Laatst online: 13-05 23:53
@Alarmnummer: Dank voor de nuttige reactie, maar ik kan vrij redelijk (ook weer niet overdrijven natuurlijk) programmaren, was puur een ding dat me opeens niet meer lukt.
@iruoy: Hier zal ik mee aan de slag gaan, hartelijk dank.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

thegve schreef op 01 juli 2004 @ 20:55:
@Alarmnummer: Dank voor de nuttige reactie, maar ik kan vrij redelijk (ook weer niet overdrijven natuurlijk) programmaren, was puur een ding dat me opeens niet meer lukt.
Ik had de indruk dat je niet wist hoe je informatie van het ene object aan het andere object moest doorgeven.

  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 23:47
Alarmnummer schreef op 01 juli 2004 @ 20:50:
Terug naar de 1e bladzijde van je boek en niet met gui beginnen totdat je kan programmeren.
>:)

  • thegve
  • Registratie: Februari 2004
  • Laatst online: 13-05 23:53
ik heb nu dit aangemaakt onder Form1:
public int datagridnummer
{
get
{
return nummer;
}
set
{
nummer=datagridnummer;
}
}
maar ik kan er vanaf Form2 toch nog niet bij. Enig idee? Svp geen pogingen mij van je geweldige kennis te overtuigen met dingen als "begin bij blz 1 van je boek".

  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 23:47
thegve schreef op 01 juli 2004 @ 21:14:
ik heb nu dit aangemaakt onder Form1:
public int datagridnummer
{
get
{
return nummer;
}
set
{
nummer=value;
}
}
maar ik kan er vanaf Form2 toch nog niet bij. Enig idee? Svp geen pogingen mij van je geweldige kennis te overtuigen met dingen als "begin bij blz 1 van je boek".
Ik heb nog weinig ervaring met c#, maar volgens mij was dat de fout.

[ Voor 10% gewijzigd door JeroenTheStig op 01-07-2004 21:18 ]


  • thegve
  • Registratie: Februari 2004
  • Laatst online: 13-05 23:53
Ik heb net een idee gekregen, ik verander gewoon de constructor van 2, en ga dan een nieuwe form2 vanaf form1 (zegmaar) met new Form2(nummer).

En er was licht.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

[b][message=21123292,noline]thegve schreef op 01 juli 2004 @ Enig idee? Svp geen pogingen mij van je geweldige kennis te overtuigen met dingen als "begin bij blz 1 van je boek".
Heb jij een referentie naar een object van het type Form1? Als jij dat niet heb dan ben ik nog steeds voor die pagina 1.

[ Voor 10% gewijzigd door Alarmnummer op 01-07-2004 21:22 ]


  • thegve
  • Registratie: Februari 2004
  • Laatst online: 13-05 23:53
Ook nog niet zo verschrikkelijk veel ervaring met c#, maar volgens mij heb ik wel gelijk.

En natuurlijk heb ik een verwijzing naar Form1, je mag wel van een beetje niveau uitgaan opzich @ tweakers hoor...

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

thegve schreef op 01 juli 2004 @ 21:24:
Ook nog niet zo verschrikkelijk veel ervaring met c#, maar volgens mij heb ik wel gelijk.

En natuurlijk heb ik een verwijzing naar Form1, je mag wel van een beetje niveau uitgaan opzich @ tweakers hoor...
Uit je vraagstelling kon ik niet opmaken hoe goed je erin thuis was. Ik zie een screenshot maar daar gaat het dus helemaal neit om. Dit soort dingen zie je vooral bij beginners omdat ze niet weten waar ze beginnen moeten. Bij mensen die gevorderd zijn zou ik verwachten: ik snap geen snars van c# properties of iets in die geest.

Verwijderd

thegve schreef op 01 juli 2004 @ 21:14:
ik heb nu dit aangemaakt onder Form1:
public int datagridnummer
{
get
{
return nummer;
}
set
{
nummer=datagridnummer;
}
}
maar ik kan er vanaf Form2 toch nog niet bij. Enig idee? Svp geen pogingen mij van je geweldige kennis te overtuigen met dingen als "begin bij blz 1 van je boek".
mijn eigenlijke bedoeling was om de property op form 2 te maken. dan ergens iets allah:
code:
1
2
3
Form2 frm2 = new Form2();
frm2.Open();
frm2.datagridnummer = je_int_datagridnummer;

  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 23:47
thegve schreef op 01 juli 2004 @ 21:24:
Ook nog niet zo verschrikkelijk veel ervaring met c#, maar volgens mij heb ik wel gelijk.

En natuurlijk heb ik een verwijzing naar Form1, je mag wel van een beetje niveau uitgaan opzich @ tweakers hoor...
oke, wist ik niet, maar dan wil het op beide manieren. Ik denk dat je even moet nadenken over referenties, ik denk niet dat we dat hier allemaal voor moeten kauwen. Hou in ieder geval je gui en de functionaliteiten gescheiden. Misschien kun je je beide forms met elkaar laten communiceren door in de constructor van je 2e form je mainform als ref mee te geven. Zo kun je er altijd bijkomen vanuit je 2e form.

[ Voor 15% gewijzigd door JeroenTheStig op 01-07-2004 21:34 ]


  • Juicy
  • Registratie: December 2000
  • Laatst online: 24-05 12:51
thegve schreef op 01 juli 2004 @ 20:42:
Om een beetje een idee te geven van wat het is hierbij een screenie, in 256 kleuren bitmap, omdat deze windows nog beetje kaal is en paint nog niet voorzien is van jpeg ondersteuning.
1. Ik weet niet wat jij voor een paint hebt, maar hij is zeker niet van Microsoft ... JPG is zonder problemen te saven.

2. De vraag is verder erg basic en daarom is het misschien verstandig om een boek aan te schaffen voor de basisbeginselen van programmeren / C#.

-


  • thegve
  • Registratie: Februari 2004
  • Laatst online: 13-05 23:53
Iruoy: Je bent geweldig, dit was de gemakkelijkste oplossing, ik ben nog niet uitgecode, maar ik weet zeker dat dit wel gaat lukken. Hartelijk bedankt.

  • thegve
  • Registratie: Februari 2004
  • Laatst online: 13-05 23:53
Om verdere discussie over paint te voorkomen. Ik ben voorzien van de paint die op de volgende screenie is te zien.
Screenie

  • cimbom
  • Registratie: Juni 2001
  • Laatst online: 26-04-2024

cimbom

Just Kidding

Wat ik altijd doe is als je van een overzicht scherm naar detail scherm moet.
Constructor van detail scherm paramatizeren met id van de te tonen object (in dit geval recept). In die constructor dan details ophalen van database doormiddel van die id, en invullen in je GUI. En je kan hetzelfde detail scherm gebruiken als je nieuwe recepten wil toevoegen, namelijk door id -1 ofzo mee te geven.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

cimbom schreef op 01 juli 2004 @ 21:44:
Wat ik altijd doe is als je van een overzicht scherm naar detail scherm moet.
Constructor van detail scherm paramatizeren met id van de te tonen object (in dit geval recept). In die constructor dan details ophalen van database doormiddel van die id, en invullen in je GUI. En je kan hetzelfde detail scherm gebruiken als je nieuwe recepten wil toevoegen, namelijk door id -1 ofzo mee te geven.
Waarom geef je niet gewoon het te tonen object mee?

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Wat ik zou doen is pak de unique id van de geselecteerde item. Stop die op form2 (met behulp van public property's (wel met value wat boktor dus zegt)) en gebruik dan een SQL statement om de details van de item op te halen.

ff uit blote bolletje (heb nu ff geen beschikking over Visual Studio):

Dit in je Form2:
C#:
1
2
3
4
5
6
7
8
9
10
11
public int UniqueID
{
  get
  {
     Return _ID
  }
  set
  {
     _ID = value
  }
}

Met een integer variable _ID.

Gebruik nu dit om waarde van form1 naar form2 te krijgen:
C#:
1
2
3
4
Form2 frm2 = new Form2();
frm2.Open();
frm2.UniqueID = id_nummer_van_geselecteerde_item;
frm2.ShowDialog();


En je ID haal je uit je Acces database.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

eghie schreef op 01 juli 2004 @ 22:21:
Wat ik zou doen is pak de unique id van de geselecteerde item. Stop die op form2 (met behulp van public property's (wel met value wat boktor dus zegt)) en gebruik dan een SQL statement om de details van de item op te halen.
Laat me raden: je gaat die sql code in je gui code prakken.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
[rml]whoami in "[ VB.NET] waardes van een andere form?"[/rml]
Was trouwens ook via de faq terug te vinen.

Trouwens, om een detail van je geselecteerde item te tonen, kan je ofwel de PK van het geselecteerde item doorgeven aan je nieuwe form, ofwel je volledige object doorgeven:

code:
1
2
3
4
5
6
7
8
9
10
11
12
class FormDetail 
{
      public FormDetail( int primKey )
      {
           // load via pk and show
      }

       public FormDetail( Recept r )
       {
           // show recept
       }
}

en dan in je mainform:
code:
1
2
3
4
5
public button_click(object sender, EventArgs e)
{
      FormDetail f = new FormDetail( currSelectedRecept);
      f.Show();
}

[ Voor 97% gewijzigd door whoami op 01-07-2004 23:37 ]

https://fgheysels.github.io/


  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Alarmnummer schreef op 01 juli 2004 @ 22:38:
[...]

Laat me raden: je gaat die sql code in je gui code prakken.
ehhm ja. Het is wel een Acces database en die heeft volgens mij geen stored procedures ofzo.

Verwijderd

Waar alarmnummer op doelt is dat dat niet de meest gestructureerde aanpak is. Als je zoiets 'netjes' doet verpak je recept(en) in een mooi objectmodelletje en is je GUI niets meer dan een redelijk losstaande presentatielaag. Hiervoor zijn al allerhande aanpakken bekend en uitgeprobeerd (MVC enzo)...

Ook vanwege z'n opmerking (die verder genegeerd is)
Waarom geef je niet gewoon het te tonen object mee?
Je krijgt dan iets (in zware pseudo-code) als:
code:
1
2
Form f = new ViewReceptVorm(GeselecteerdeRecept)
f.Show()

En f hoeft dan niets meer te queryen of door te krijgen, aangezien hij gewoon kan terugvallen op de referentie naar het recept, die hij bij het constructen heeft meegekregen.

Software maken is als je 't goed wil doen wat meer dan eenvoudig wat code aan eventhandlers knopen :)

[ Voor 36% gewijzigd door Verwijderd op 02-07-2004 00:25 ]


Verwijderd

Wat je zou kunnen proberen
is een standaard form maken.

met de benodigde (print)(close)(etc.)knoppen. hierin een richTextBox, textField of textBox of net wat je wilt.
maak dan eerst een public string recept_buffer, als je het over c# hebt kan je met onder staande code een txt of ander bestand laden (lees onderstaand voor form1)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        public Form2()
        {

            InitializeComponent();

                         try
            {
                string FILE_NAME = @"./recept_buffer.bak";
                StreamReader aa= File.OpenText(FILE_NAME);
                recept_buffer = aa.ReadToEnd();
                aa.Close();
            }
            catch
            {
                MessageBox.Show("Er Er is een fout ontstaan met het door parsen van het recept\nProbeer het pnieuw","",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }

        }


nu heb je zeg maar form2 'af' zelf aanpassen natuurlijk.
nu doe je in form1 een public (kan en mag ook private) int aanmaken bijv. int recept_details

maak nu als je dubbel klikt op een recept dat recept_details een nummer krijgt.. bijv. je kiest gebakken aardappels, recept 3 dus recept_details = 3.
maak dan met een "switch" als recept_details 3 is dat het recept van gebakken aardappels naar recept_buffer.bak geschreven wordt doe dit zo.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
string FILE_NAME = @"./recept_buffer.bak";
string recept = "";

switch(recept_buffer)       
      {         
         case 0:         
         case 1:   
    File.Delete(FILE_NAME);
    StreamWriter sr = File.AppendText(FILE_NAME);
    sr.Write("het recept voor gebakken aardappeltjes\n\n");
        sr.Write("Bak de aardappeltjes goed aan 15 minuten");
        sr.Write("etc.");
        sr.Write("etc.");
    sr.Close();
//einde gerecht 1
            break;                  
         case 2:            
    File.Delete(FILE_NAME);
    StreamWriter sr = File.AppendText(FILE_NAME);
    sr.Write("het recept voor gebakken aardappeltjes\n\n");
        sr.Write("Bak de aardappeltjes goed aan 15 minuten");
        sr.Write("etc.");
        sr.Write("etc.");
    sr.Close();
//einde gerecht 2
        break;
         case 3:            
    File.Delete(FILE_NAME);
    StreamWriter sr = File.AppendText(FILE_NAME);
    sr.Write("het recept voor gebakken aardappeltjes\n\n");
        sr.Write("Bak de aardappeltjes goed aan 15 minuten");
        sr.Write("etc.");
        sr.Write("etc.");
    sr.Close();
//einde gerecht 3
        break;
         default:            
            MessageBox.Show("Er is een fout gemaakt of het gekozen gerecht heeft geen specifieke details.");            
            break;      
       }


Dit werkt zonder meer uitstekend.

het ziet er mischien slordig uit. en er kunnen best wel wat typ fouten inzitten,

maar het werkt :)

veel succes ermee

Verwijderd

Verwijderd schreef op 02 juli 2004 @ 00:37:
Wat je zou kunnen proberen

[knip]

maar het werkt :)

veel succes ermee
AaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAAAAAAAAAAAAAAAAAAAaaaaaaargh! Bah, jiew, juck. Ik geloof dat ik even niet goed word... :'(

[ Voor 6% gewijzigd door Verwijderd op 02-07-2004 00:52 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Heh? :? :?

Jij gaat dus je data en de afhankelijkheden van die data vastleggen in je code ?

* whoami valt stijl achterover.

* whoami ziet dat je een IT opleiding doet en valt nog verder achterover.

[ Voor 25% gewijzigd door whoami op 02-07-2004 08:47 ]

https://fgheysels.github.io/


  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 23:47
ROFLOL @ reacties :D

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

De oplossing is zo slecht dat die eigelijk weer goed is :P Ik heb in ieder geval weer een grote glimlach op mijn gezicht.

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Alarmnummer schreef op 02 juli 2004 @ 09:11:
De oplossing is zo slecht dat die eigelijk weer goed is :P Ik heb in ieder geval weer een grote glimlach op mijn gezicht.
Het is weer vrijdag. ;) :D

Nu kun je idd het beste het hele recept door rossen naar form2 ja, ipv alleen het id om zo weer een sql statement in elkaar te draaien. Ik had er zelf nog niet echt aan gedacht, maar het is inderdaad een betere manier.

Trouwens Germ, hier heb ik iets om van een geselecteerde rij een waarde uit te lezen:
C#:
1
2
3
4
5
6
7
DataRow dr;
            dataAdapter.SelectCommand.CommandText=
                "SELECT * FROM vaag_tabelletje"

            int index=dataGrid1.CurrentRowIndex;
            dr=dataSet.Tables[0].Rows[index];
            dataAdapter.SelectCommand.Parameters[0].Value=dr["ID"];

[ Voor 35% gewijzigd door eghie op 02-07-2004 15:10 ]

Pagina: 1