Toon posts:

[vb.net] menu aanpassen via ander form

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben hier al een tijdje naar op zoek. ik moet via form2 de mainmenu aanpassen van form1. ik heb dit al op msdn gezocht en google maar er staat nix van in.. wel hoe je het moet doen op form1, maar niet vanuit een andere form.
heeft iemand misschien een idee waar ik op verder kan borduren..

thnx

Verwijderd

Via delegates.

Oh ja, zinnen beginnen met een hoofdletter. Dit kun je op drie manieren bereiken:

-Shift + letter
-Capslock dan letter daarna nog een keer capslock
-Een andere creative manier. (Copy-paste bijvoorbeeld)

Verwijderd

Topicstarter
Verwijderd schreef op zaterdag 26 maart 2005 @ 23:48:
Oh ja, zinnen beginnen met een hoofdletter. Dit kan je op drie manieren bereiken:

-Shift + letter
-Capslock dan letter daarna nog een keer capslock
-Een andere creative manier. (Copy-paste bijvoorbeeld)
hmm.. en wat heeft dit voor betekenis.. btje triest he.. ben je nederlandsleraar of zo..

maar toch bedankt..

  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Verwijderd schreef op zaterdag 26 maart 2005 @ 23:50:
[...]


hmm.. en wat heeft dit voor betekenis.. btje triest he..
Dat je zinnen begint met een hoofdletter, en eindigt met een punt, omdat dat beter leest, en de mensen dan meer geneigd zullen zijn om je te helpen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op zondag 27 maart 2005 @ 09:35:
[...]

Dat je zinnen begint met een hoofdletter, en eindigt met een punt, omdat dat beter leest, en de mensen dan meer geneigd zullen zijn om je te helpen.
Dan moet Fate? dat gewoon zeggen dan door zo'n sarcastische opmerking te maken.. Zit niemand op te wachten denk ik..
Maar goed, btje offtopic dit volgens mij..
Excuse..

Verwijderd

Topicstarter
Ik ben al een aardig eindje gekomen met de delegates. Maar ik kan nergens vinden (oa gezocht op google, GoT en de vele boeken die ik heb) hoe je een delegate kan aanroepen.
Hier is de code die ik tot nu toe heb.

Visual Basic .NET:
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
Public Class investor
    Public Delegate Sub Transact(ByVal Quentity As Integer, _
    ByVal StockSymbol As String)

    Event Buy As Transact
    Event Sell As Transact
End Class

Public Class Broker
    Public WithEvents Client As investor

    Sub New()
        Client = New investor()
    End Sub

    Private Sub HandleBuy(ByVal Quentity As Integer, _
    ByVal StockSymbol As String) Handles Client.Buy

        'buy procedure hier
    End Sub

    Private Sub HandleSell(ByVal Quentity As Integer, _
    ByVal StockSymbol As String) Handles Client.Sell
        'sell procedure hier
    End Sub
End Class

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Ik snap niet goed wat deze code met menu's te maken heeft. Wat ik wel (denk ik) begrijp is dat de TS het verschil tussen forms (klasses) en instanties van forms (objecten) niet helemaal snapt. In ieder geval zijn delegates niet nodig als je dat 'form2' aanpast vanuit form1, mits die twee forms in dezelfde thread draaien.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Korben schreef op donderdag 31 maart 2005 @ 02:18:
Ik snap niet goed wat deze code met menu's te maken heeft. Wat ik wel (denk ik) begrijp is dat de TS het verschil tussen forms (klasses) en instanties van forms (objecten) niet helemaal snapt. In ieder geval zijn delegates niet nodig als je dat 'form2' aanpast vanuit form1, mits die twee forms in dezelfde thread draaien.
Wat hebben delegates met threads te maken ? Helemaal niets.
Je kan echter wel rechtstreeks het menu dat je in form2 hebt gaan aanpassen vanuit form1, maar dan ga je wel teveel 'afhankelijkheid' in beide forms gaan steken. form1 en form2 gaan dan tightly coupled zijn, en dat wil je meestal niet.
Daarom is het handig om dit mbhv delegates te doen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Dit was ook nog maar een voorbeeld van een delegate zoals ik hem op Form1 heb geplaatst. Dit was ik ff vergeten om erbij te zetten. Mijn vraag is hoe ik een delegate kan aanroepen vanuit Form2. De delegate moet ik nog aanpassen zodat ik het menu daarmee kan aanpassen.
Wat ik wil is het volgende:
De delegate op Form1 moet een variabele accepteren welke aangeeft wat er moet gebeuren. Bijvoorbeeld dat de delegate een aantal functies heeft nl 'Menutitel veranderen', ' Menuitem verwijderen', 'Menuitem visible'.
Als hij de menutitel moet veranderen, waar ik nu mee bezig ben, dan moet de delegate de titel doorkrijgen en weten welke functie die moet pakken volgens mij. (correct me if I'm wrong)
Nu wil ik weten hoe ik de delegate moet aanroepen.
Bijvoorbeeld:
delegate.changetitel("Item7", "Nieuwe titel")

Ik snap er nix meer van :'(

  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Ik doe geen VB.NET, maar C#, en voor zover ik het kan zien heb jij die delegates als 'events' gedefinieerd.
Dat houdt op zich in dat ze enkel binnen hun eigen class kunnen getriggered worden.

Wat je kan doen, is een public method maken op Form1 die die events triggered:
code:
1
2
3
4
5
6
7
public void TriggerBliep(int quantity, string symbol )
{
    if( Bliep != null )
    {
          Bliep(quantity, symbol);
    }
}


Verder vind ik de manier waarop je die menu-items wilt aanpassen nogal ranzig...

https://fgheysels.github.io/


Verwijderd

Topicstarter
Verder vind ik de manier waarop je die menu-items wilt aanpassen nogal ranzig...
Wat vind je er verkeerd aan dan. Ik dacht dat het juist de goede manier was.
Maar als je een andere insteek hebt hoor ik het graag.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Ik zou gewoon geen variable meegeven aan die delegate, omdat je dan aan de hand van die variable gaat bepalen wat er moet gedaan worden.

Ik vraag me nu trouwens af of delegates wel de goede manier zijn om het te doen:
Je hebt form1, dat is het form waar je menu opstaat. Dit menu wil je aanpassen vanaf form2 ?
Open je form2 vanaf form1, en is form1 de parent van form2 ?

https://fgheysels.github.io/


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

whoami schreef op donderdag 31 maart 2005 @ 08:39:
[...]
Wat hebben delegates met threads te maken ? Helemaal niets.
Als je een control wilt aanpassen vanuit een andere thread dan waar de control op is aangemaakt (waar de message pump dus draait) dan moet je Control.Invoke gebruiken. 3 keer raden wat het eerste argument van die functie is... Juist: een delegate.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Korben schreef op donderdag 31 maart 2005 @ 16:08:
[...]
Als je een control wilt aanpassen vanuit een andere thread dan waar de control op is aangemaakt (waar de message pump dus draait) dan moet je Control.Invoke gebruiken. 3 keer raden wat het eerste argument van die functie is... Juist: een delegate.
Euh, ja, dat weet ik wel (en dat heb ik hier zelf al genoeg ge-advoceert), maar dan nog heeft het hele principe van delegates niets met threads vandoen.
Dat die Invoke method een delegate neemt, ok, maar dat doet niets af van het feit dat je delegates kunt gaan gebruiken in een non-threaded environment.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Je hebt form1, dat is het form waar je menu opstaat. Dit menu wil je aanpassen vanaf form2 ?
Open je form2 vanaf form1, en is form1 de parent van form2 ?
Ik open Form2 vanaf Form1. Het is dus de bedoeling dat ik op 'log in' druk in het menu, dan opent Form2 en dat is een inlogscherm waarmee ik kan inloggen op de sql server. Als de inlog succesvol is, dan moet Form2 sluiten en de caption van de 'log in' uit het menu op Form1 veranderen in 'log out'.
Het mag ook zo zijn dat ik 2 MenuItems aanmaak, waarbij LogOut eerst op visible=false staat, en als het succesvol is, LogOut op visible=true en LogIn op visible=false.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Dan zou ik het niet via delegates doen; er zijn simpelere manieren.
Het hangt er natuurlijk vanaf hoe je die authenticatie doet enzo om een goede implementatie te gaan geven.

https://fgheysels.github.io/


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Verwijderd schreef op donderdag 31 maart 2005 @ 17:20:
[...]
Ik open Form2 vanaf Form1. Het is dus de bedoeling dat ik op 'log in' druk in het menu, dan opent Form2 en dat is een inlogscherm waarmee ik kan inloggen op de sql server. Als de inlog succesvol is, dan moet Form2 sluiten en de caption van de 'log in' uit het menu op Form1 veranderen in 'log out'.
Het mag ook zo zijn dat ik 2 MenuItems aanmaak, waarbij LogOut eerst op visible=false staat, en als het succesvol is, LogOut op visible=true en LogIn op visible=false.
Als je Form2 als dialog opent (ShowDialog() ipv Show()) dan kun je ook gewoon een property in Form2 maken die aangeeft of het inloggen wel of niet gelukt is. Sterker nog, waarschijnlijk kun je daar gewoon de DialogResult property voor gebruiken. De code om dat menu te veranderen zit dan in Form1, en dat gaat dan zo:

Visual Basic .NET:
1
2
3
4
5
Dim form As New Form2

If Form2.ShowDialog() = DialogResult.OK Then
   ' hier dan code om je menuitems te verminken
End If

[ Voor 14% gewijzigd door Korben op 31-03-2005 21:28 ]

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Korben schreef op donderdag 31 maart 2005 @ 21:22:
[...]

Als je Form2 als dialog opent (ShowDialog() ipv Show()) dan kun je ook gewoon een property in Form2 maken die aangeeft of het inloggen wel of niet gelukt is. Sterker nog, waarschijnlijk kun je daar gewoon de DialogResult property voor gebruiken. De code om dat menu te veranderen zit dan in Form1, en dat gaat dan zo:

Visual Basic .NET:
1
2
3
4
5
Dim form As New Form2

If Form2.ShowDialog() = DialogResult.OK Then
   ' hier dan code om je menuitems te verminken
End If
DialogResult kan je hier niet voor gebruiken, want ook als de user een verkeerde username/password heeft opgegeven, dan gaat dat menu-item veranderd worden.
Het is beter om te checken of je Principal geauthenticeerd is (als je gebruik maakt van die mogelijkheden van .NET om je security te gaan bouwen).
Indien niet, dan kan je het evt adhv een property van je form doen, maar dan ga je wel 'logica' gaan mixen met je UI en dat is niet echt netjes.
Op die manier kan je ook niet echt op een nette manier ergens anders in je applicatie gaan nagaan of de user wel of niet geauthenticeerd is, of welke identiteit hij heeft.

https://fgheysels.github.io/


Verwijderd

Principal etc. is helemaal niet waar TS in geinteresseerd is, denk ik.
Form1 (het mainform neem ik aan) roept Form2 aan (het loginscherm, fantastische keuze van form namen overigens, dat maakt een hoop duidelijk :?), en als de login lukt, moet de caption van een menuitem veranderen.
't Is toch niet zo moeilijk om Form2 een property of public variabele mee te geven die op True gezet wordt wanneer de login gelukt is? Form1 kan die dan probleemloos uitlezen wanneer er op Form2 op OK geklikt wordt.

(sorry voor de wat abstracte beschrijving, maar ik heb C# /VB.NET nog niet in een winforms omgeving gebruikt, daarvoor gebruik ik Delphi... :))

  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
Verwijderd schreef op donderdag 31 maart 2005 @ 22:54:
Principal etc. is helemaal niet waar TS in geinteresseerd is, denk ik.
Tja, ik reik ook maar wat aan he, als jij security inbouwt in je app, dan kan ik me wel voorstellen dat je het dan ook goed wilt doen.
Maar goed, ik zwijg al.

https://fgheysels.github.io/


Verwijderd

Topicstarter
ik heb een andere insteek genomen zoals ze hier al aangaven. Ik vraag een functie aan op het hoofdform. Dit doe ik om dan de menuitems aan te kunnen passen daarop.

Visual Basic .NET:
1
2
3
4
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim frm_twee As form1
        frm_twee.test()
    End Sub


Maar hij pakt hem niet.
Hij geeft als foutmelding: Object reference not set to an instance of an object.

Wie weet wat dit betekent.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09-05 01:02
dat betekent dat je iets wilt doen met een object dat niet gealloceerd was.
Je declareert wel je form, maar je alloceert 'm niet.

/basic

https://fgheysels.github.io/

Pagina: 1