[VB.NET 2005] Meerdere forms van hetzelfde als array

Pagina: 1
Acties:
  • 376 views sinds 30-01-2008
  • Reageer

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 21-10 21:48
Ik zit met een volgens probleem:

Ik ben bezig met het maken van een Messenger applicatie client/server. Alle communicatie verloopt via platte opmaak, dmv eenvoudig te herkennen stukken. En wordt via een socket naar de server verstuurd.

Op mijn client ben ik nu zover dat ik al dat kan verzenden vanaf een chat formulier, die via een delegate een functie aanroept op de main form. Nu wil ik graag alleen bij het declaren van het nieuwe chatform een userid meegeven aan de formnaam, zodat als er een bericht binnenkomt voor die user id ik kan zoeken of het form reeds bestaat, zoja de tekst doorgeven naar dat chatform. Daarvoor heb ik onderstaande code bedacht:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub ListBox_users_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox_users.MouseDoubleClick
        Dim userstring() As String
        Dim userid As String
        Dim username As String

        userstring = Split(ListBox_users.SelectedItem, "-")
        userid = userstring(0)
        username = userstring(1)
        ' Lets see if there is an slection in the listbox_users
        If Not ListBox_users.SelectedItem = "" Then
            Dim talkto(userid) As form_talkto
            talkto(userid).Text = ListBox_users.SelectedItem
            talkto(userid).Show()
        End If
    End Sub


Waarbij ik dus een dim talkto(userid) as form?talkto aanmaak. Omdat het gaat om een array, kan ik hem niet als New form?talkto dimmen. Met als gevolg dat er een null reference exception optreedt, immers er is nog geen New talkto_form.

Met de MSDN, kom ik geen uitleg/voorbeelden tegen omtrent het aanmaken van meerdere forms met een unieke id, in array soort. Ook via google kom ik niet verder dan algemene array formaten maar niet icm forms.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Ik ben niet zo thuis in de VB.NET syntax, maar wat doe je daar op regel 11 ?

Als ik het goed begrijp -want je tekst is hier en daar nogal onduidelijk- wil je dus al je open forms in een array stoppen ?
Waar declareer je de array waar alle forms moeten bijgehouden worden ?
Waar creeër je een instance van een nieuwe form ?
Wist je dat er al zoiets bestond als een 'OpenForms' collectie (kijk maar eens naar de members van de Application class).

https://fgheysels.github.io/


  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 21-10 21:48
whoami schreef op woensdag 02 mei 2007 @ 22:20:
Ik ben niet zo thuis in de VB.NET syntax, maar wat doe je daar op regel 11 ?

Als ik het goed begrijp -want je tekst is hier en daar nogal onduidelijk- wil je dus al je open forms in een array stoppen ?
Waar declareer je de array waar alle forms moeten bijgehouden worden ?
Waar creeër je een instance van een nieuwe form ?
Wist je dat er al zoiets bestond als een 'OpenForms' collectie (kijk maar eens naar de members van de Application class).
Ik wil graag een X aantal schermen form_talkto, van elkaar kunnen onderscheiden. Vandaar dat ik het in een array wil stoppen. Of het de meest efficiente manier is weet ik nog niet.
De array is reeds gedeclareerd in een module.
De de new kan ik niet gebruiken icm een array element, zegt VB mij.
Open forms zal ik zeker even naar kijken, maar het wordt lastig als er 3 talk-to vensters open staan, en ze heten allemaal talkto. Is er misschien een manier om een variabele te dimmen met een waarde uit een andere variabele ?

Verwijderd

Ff een C# voorbeeld, maar eenvoudig om te zetten naar VB. Zo heb ik het ooit opgelost zag ik in mijn code (alweer aantal jaar geleden, de rest vd is echt troep :')):

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TalkForm : Form
{
     public TalkForm() : base()
     {
          id = Guid.NewGuid();
     }

     private Guid id;

    public Guid ID
    {
     get { return id; }
    set { id = value; }
    }
}


Zo heb je ineens wel een ID op je form en je kunt hem in de designer blijven gebruiken :)

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 21-10 21:48
Verwijderd schreef op woensdag 02 mei 2007 @ 22:36:
Ff een C# voorbeeld, maar eenvoudig om te zetten naar VB. Zo heb ik het ooit opgelost zag ik in mijn code (alweer aantal jaar geleden, de rest vd is echt troep :')):

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TalkForm : Form
{
     public TalkForm() : base()
     {
          id = Guid.NewGuid();
     }

     private Guid id;

    public Guid ID
    {
     get { return id; }
    set { id = value; }
    }
}


Zo heb je ineens wel een ID op je form en je kunt hem in de designer blijven gebruiken :)
Sorry, maar C++ Heb ik geen kaas van gegeten. Miscchien een kleine uitleg, of een translate naar vb ?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
1. Het is geen C++ maar C#
2. C# is redelijk eenvoudig zelf om te zetten naar VB.NET
3. Jij bent de vragensteller, dus mag je ook wel wat moeite doen om de tips / oplossingen van anderen te begrijpen / zelf om te zetten.

Dat je geen 'new' kan gebruiken icm een array element is echt onzin. Je zal iets verkeerd doen, dus kijk even in de MSDN. Dit lukt nl. gewoon perfect:
C#:
1
2
MyForm[] myArray = new MyForm[5];
myArray[0] = new MyForm();

https://fgheysels.github.io/


Verwijderd

Het lijkt me logisch dat dit niet werkt:

Visual Basic .NET:
11
12
13
Dim talkto(userid) As form_talkto 
talkto(userid).Text = ListBox_users.SelectedItem 
talkto(userid).Show() 


Je maakt wel een array aan met forms, maar de elements zijn nog steeds leeg, dus proberen properties aan te roepen van een form in de array (die null is, vandaar nullreferenceexception) zijn dus gedoemd om fout te gaan.

Je zal toch echt eerst ergens het array moeten vullen. Het lijkt me dan ook logischer als het array een private var is binnen je class en elke keer als er een form geopend moet worden, er een nieuw element wordt toegevoegd aan het array en uiteraard bij het sluiten weer verwijderen uit het array.
Pagina: 1