Form erstellen bei laufender Anwendung

  • VB.NET

Es gibt 49 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Form erstellen bei laufender Anwendung

    moin leute

    und zwar folgendes
    ich baue nun eine art chatsystem...
    das chatten ansich klappt auch wunderbar allerdings will ich nun einen "privatchat" haben

    also man sendet zum server
    /msg hans hi alles klar bei dir?
    dan steht allerdings im hauptchat mit roterschrift (nur bei hans)
    hi allles klar bei dir?

    nun will ich aber das sich dafür eine form erstellet mit sendebutton/sendetext/chatverlauf/name
    so nun will ich das wenn man nun auf dne knopf in der neuen form klickt "senden" das der text an hans gesendet wird...
    soweit auch alles klar
    nur das problem ist nun... wie bekomm ich das hin das wenn nun ein neuer kommt namens "werner" das sich die form nochmal neu erstellt (also eine kopie) und diese dan nur für werner ist? also einprivatchat für werner und einen für hans?
    gibt es da irgentwie eine anwendung wie man eine form erstellen kann? also nicht im editor sondern die soll sich ja bei laufender anwendung erstellen...

    Quellcode

    1. Dim pForms as new Dictionary(Of String, Form1)
    2. pForms.Add("werner", new Form1("werner"))


    So zum Beispiel. Du musst einfach eine neue Instanz der Form (hier Form1) erschaffen.
    Dann bastelst du dir ein Argument für die Sub New, darin wird dann deine Form "personalisiert".
    Im Dictionary kannst du hinterher einfacher auf deine Form zugreifen und kannst beliebig viele hinzufügen...

    MVN050 schrieb:

    nochmal neu erstellt (also eine kopie) und diese dan nur für werner ist?

    angenommen, die Form heisst fmChat

    VB.NET-Quellcode

    1. 'Neue Form erzeugen
    2. Dim frm as New fmChat
    3. 'Eigenschaften festlegen
    4. fmChat.Title = "Werner"
    5. fmChat.bnSenden.Text = "Nachricht an Werner senden"
    6. 'Form anzeigen
    7. frm.Show()

    MfG, Live
    --- Zurzeit inaktiv ---
    Edit by ErfinderDesRades: unnötiges Vollzitat entfernt


    das würde also bedeuten das er mir nun eine komplette kopie von dem form "fmChat" erzeugt und diese dan "frm" nennt?
    in deinem beispiel änderst du jetzt nur den formtitel in "werner" oder wie soll ich das verstehen?

    und was ist wenn es dir form "fmchat" schon gibt? erstellt er diese dan nochmal? oder kuckt er ob es diese schon gibt und erstellt dan nix mehr? gibt es dafür auch eine abfrage?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    MVN050 schrieb:


    das würde also bedeuten das er mir nun eine komplette kopie von dem form "fmChat" erzeugt und diese dan "frm" nennt?
    in deinem beispiel änderst du jetzt nur den formtitel in "werner" oder wie soll ich das verstehen?

    und was ist wenn es dir form "fmchat" schon gibt? erstellt er diese dan nochmal? oder kuckt er ob es diese schon gibt und erstellt dan nix mehr? gibt es dafür auch eine abfrage?

    ja, das stimmt. es wird ein neues objekt der Klasse frmchat erstellt, mit festgelegten eigenschaften, zb das der formzitel werner ist.
    nein, er erstellt die Form nocheinmal, es kann ja schließlich mehrere objekte einer klasse geben (grundlagen).
    --- Zurzeit inaktiv ---
    danke das hilft mir nun weiter :)
    jetzt hab ich da ein bissle rumgefummelt und solangsam steig ich da durch ;)

    allerdings hab ich nun probleme damit das sich die form nur einmal erstellen soll
    also das ich eine abfrage brauch wiezb

    VB.NET-Quellcode

    1. if exist form "privatchat-hans" then
    2. irgentwas
    3. else
    4. form erstellen


    ich komme immer auf die meldung das
    "privatchat-hans" nicht deklaiert wurde...
    wie kann ich das nun erbauen das es nur eine form mit dme titel gibt?

    MVN050 schrieb:

    ich komme immer auf die meldung das
    "privatchat-hans" nicht deklaiert wurde...

    ist ja klar, die form wird nicht durch ihren titel, sondern durch das objekt an sich repräsentiert. es geht bestimmt eleganter, aber das einzige was mir einfällt ist, alle objekte in einer list(of fmchat) zu speichern, und in einer schleife abzufragen, wie der titel ist. oder google einfach mal nach 'vb.net alle geöffneten fenster auslesen' oder so ähnlich ;)
    --- Zurzeit inaktiv ---
    Solch Objekte haben noch eine Tag-Property, da kannst Du Deine Kennung "werner" reinschreiben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    noBlubb schrieb:

    Live schrieb:

    list(of fmchat)

    Oder ein Dictionary verwenden, wie ich es oben zeige ^^



    list(of fmchat)
    wird bei mir als fehler angezeigt... muss ich dafür noch was importieren oder wie ist das nun?
    so ich habe mir jetzt eine form namens "privatchat" erstellt
    in dieser form sind 3 sachen
    text.name=label1
    button.name=send
    richtextbox.name=chat
    sendetext.name=sendtext

    so nun lass ich mir von dieser form eine neue form erstellen, mit dme namen "pchat" ... das klappt so auch sehr gut...
    jetzt sendet der hauptserver zumir einen befehl inetwa so
    "/msg werner hi mvn050 alles klar bei dir?"
    soweit sogut
    nun kam ich auf die idee. ich erstll in der pchat-form die richtext mit dem namen "pchat-werner" (weil ich ja mit werner privat schreiben will)
    perfekt das klappt die richtextbox heisst nun so :)

    nun will ich noch das der text "mvn050 alles klar bei dir?" in die richtextbox eingetragen wird... ähh...
    jane der code

    VB.NET-Quellcode

    1. Pchat.pchat-werner.AppendText(a(2))

    geht natürlich nicht... im designer gibt es ja die richtextbox "pchat-werner" nicht
    wie kann ich das nun machen das er mir die nicht als fehler anzeigt? weil die existiert ja dan?







    RodFromGermany schrieb:


    Solch Objekte haben noch eine Tag-Property, da kannst Du Deine Kennung "werner" reinschreiben.

    wo finde ich den? ich finde zwar "tag" aber ich finde "Property" nicht???





    hier mal mein jetziger code

    VB.NET-Quellcode

    1. If s.StartsWith("/msg") Then
    2. Dim a() As String = s.Split(" "c)
    3. 'Dim a() As String = s.Split(" "c)
    4. Dim privatchatuser As String = a(1)
    5. 'Neue Form erzeugen
    6. Dim Pchat As New Privatchat
    7. 'Eigenschaften festlegen
    8. Pchat.Label1.Text = a((1)
    9. Pchat.chat.Name = "pchat" & a(1)
    10. Pchat.Text = a(1)
    11. 'Pchat.Name = a(1)
    12. ' Pchat.AccessibleName = a(1)
    13. Pchat.Show()
    14. 'text eintragen
    15. Pchat.pchat & a(1).AppendText(a(2)))
    16. 'MsgBox(a(1))
    17. End If

    MVN050 schrieb:

    wird bei mir als fehler angezeigt

    Bedeutet was? Welche Fehlermeldung? Deine Textbox umbenennen ist der völlig falsche Weg.
    Erstell dir für jeden Chat eine neue Instanz deiner gesamten Form und nenn die Textbox im Designer meinetwegen ChatVerlauf.

    Dann fügst du dir mit einem Key (also dem Namen) immer eine neue Instanz...ach les meinen Beitrag oben ^^
    erstell mal die globale variable

    VB.NET-Quellcode

    1. Dim lschat as new List(of fmchat) 'oder wie deine form auch immer heißt

    und in deiner sub fügst du vor dem end if hinzu:

    VB.NET-Quellcode

    1. lschat.add(pchat) 'oder .items.add(pchat)

    und was kommt überhaupt für ne fehlermeldung?
    MfG, Live
    --- Zurzeit inaktiv ---

    MVN050 schrieb:

    wo finde ich den? ich finde zwar "tag" aber ich finde "Property" nicht???

    und

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. MessageBox.Show(Me.Tag.ToString)
    3. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    soweit sogut
    hat mir schonmal weitergeholfen allerdings immernoch das selbe problem
    hier mal wieder meinen gesammten code


    nun folgendes problem...

    VB.NET-Quellcode

    1. Dim Pchat As New Privatchat
    2. Pchat.chat.Name = a(1)
    3. Pchat.Show()
    4. MsgBox(Pchat.chat.Name)

    würde doch bedeuten das der name von "chat" (beimir die textbox für den chat) den namen von a(1)
    erhält oder? jedenfalls zeigt mir das auch die msgbox so an
    statt "chat" kommt in meinem beispiel nun "werner"
    ok wunderbar also müsste ich doch sagen können...
    trag ma den neuen text die die chattextbox (die ja jetzt nicht mehr "chat" heisst sondern "werner") ein

    VB.NET-Quellcode

    1. Pchat.a(1).AppendText(a(2))

    nö! "a" ist kein Member von "Launcher.Privatchat".
    trag ich aber nun das hier ein

    VB.NET-Quellcode

    1. Pchat.chat.AppendText(a(2))

    trägt er mir nun dne text ganz stolz die die textbox ein... aber warum? die chatbox mit dme namen "chat" gibt es doch garnicht mehr oder doch?


    hab mir das mal mit der list of genauer angekuckt
    msdn.microsoft.com/de-de/library/vstudio/6sh2ey19.aspx

    VB.NET-Quellcode

    1. listpchat.Add(Pchat) 'oder .items.add(pchat)

    scheint so auch eingetragen zu werden allerdings wird doch dan "Pchat" eingetragen oder? ich will aber das jetzt "werner" "hans" "udo" eingetragen wird...

    VB.NET-Quellcode

    1. listpchat.Add(a(1)) 'oder .items.add(pchat)

    nö! problem
    Der Wert vom Typ "String" kann nicht in "Launcher.Privatchat" konvertiert werden.



    hier der gesamte code


    Spoiler anzeigen



    Quellcode

    1. If s.StartsWith("/msg") Then
    2. Dim a() As String = s.Split(" "c)
    3. Dim privatchatuser As String = a(1)
    4. Dim chattag As String = "privatchatchat"
    5. 'Neue Form erzeugen
    6. Dim Pchat As New Privatchat
    7. 'Eigenschaften festlegen
    8. Pchat.Tag = "privatchat" & a(1)
    9. Pchat.Label1.Text = a(1)
    10. Pchat.chat.Tag = "privatchat"
    11. Pchat.chat.Name = a(1)
    12. Pchat.Text = a(1)
    13. listpchat.Add(Pchat) 'oder .items.add(pchat)
    14. Pchat.Show()
    15. If Pchat.Tag = "privatchat" & a(1) Then
    16. MsgBox(Pchat.chat.Name)
    17. Pchat.a(1).AppendText(a(2))
    18. End If
    19. End If

    MVN050 schrieb:

    brauch ich da ein code?
    Nein, ich will nur verstehen, wo die Änderung herkommt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    steht ganz oben im ersten beitrag

    man ist auf der "main" form
    und wenn nun der befehl "/msg werner hi werner alles klar"
    kommt, will ich für den privatchat mit "werner" ein eigenes form haben mit chatverlauf, sendetext,sendebutton
    und genau da ist ja das problem....
    was ist wenn ich nun auch mit hans schreiben will?
    ich will jetzt das sich die form "privatchat" kopiert und speciell für "hans" angepasst wird damit ich mit der "kopierten form die für hans angepasst ist" mit hans schreiben kann
    das gleiche mit der "privatchat-werner" form...

    die nachrichten kommen alle auf die "main" form
    diese soll dan überprüfen ob es eine form namens"privatchat-werner" gibt und wenn nein diese erstellen" und dan den text eintragen
    push

    also für den nachrichtenempfang hab ich nun ein modul gebaut (glaube das ist besser)

    abber immernoch das selbe problem
    ich bekomme kein text in die "chatbox" von dem jeweiligem form?

    wie kann ich dne jetzt das erstellte form auch ansprechen?
    problem is eben das der designer die form ja nicht kennt da sie ja nicht existiert... die existiert ja erst sobald man die nachricht bekommt...

    wäre dankbar für hilfe