Auf Hauptform zugreifen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von MemoAnMichSelbst.

    Auf Hauptform zugreifen

    Moin,

    ich erstelle mir in einem Programm eine zweite Version meiner Form.
    Wie kann ich von meiner Hauptform auf diese zugreifen?
    Wie kann ich prüfen ob diese überhaupt existiert?
    Und wie kann ich von der zweiten Version auf meine Hauptform zugreifen?

    VB.NET-Quellcode

    1. Dim Version2 As New frmForm

    ist der Aufruf der Form.

    Die zweite Version ist dafür gedacht um Daten innerhalb des Programms bequem umzuschaufeln.
    Ich möchte aber unterbinden dass in beiden Formversionen die gleiche Datenquelle angezapft wird. Hierfür muss ich jedoch bei jedem Wechsel der Datenquelle in einer der Formen eben dies abprüfen.

    Zudem möchte ich nicht dass nochmals eine zweite Version aufgerufen wird. Das heißt ich muss prüfen können, ob die zweite Form schon existiert.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Vielleicht mit

    VB.NET-Quellcode

    1. Dim arg As New
    2. frm2arg.Show()
    3. If arg.CanSelect = True Then
    4. 'Wenn es die Form angesteuert werden kann mach was du willst
    5. Else
    6. 'Und hier wenn sie icht angesteuert werden kann oder noch aktiviert wurde
    7. End If
    8. Private Sub arg_Load() Handles arg.Load
    9. End Sub


    Ich hab keine ahnung ob das Funktioniert, das wár fúr mich das logischte. Es gibt wahrscheinlich viel bessere und saubere Methoden :)

    Edit ich komme mit diesen vb tags nicht klaa!!!

    Edit by hal2000:
    - Code-Tags eingefügt. Tipp: Benutze einfach die Quellcodeansicht, nicht den Editor.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „hal2000“ ()

    @MemoAnMichSelbst:
    Kannst Du bitte mal folgendes erläutern:
    Ist die 2. Form dieselbe Klasse, wie die 1. Form?
    Vielleicht machst Du so was:

    VB.NET-Quellcode

    1. Private dlg As Form2
    2. Sub xxx()
    3. If dlg Is Nothing OrElsde dlg.IsDisposed Then
    4. dlg = New Form2
    5. dlg.SetParent(Me) ' Prozedur erstellen, aufrufende Form übergeben und dort zum Verwenden speichern
    6. End If
    7. If Not dlg.Visible
    8. dlg.Show() ' nicht modaler Dialog
    9. End If
    10. 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!

    MemoAnMichSelbst schrieb:

    ich erstelle mir in einem Programm eine zweite Version meiner Form.
    Wie kann ich von meiner Hauptform auf diese zugreifen?
    naja - verwende die VB.Net-Syntax:

    VB.NET-Quellcode

    1. myFormVersion2.Textbox1.Text = "Hallo Welt"


    Wie kann ich prüfen ob diese überhaupt existiert?

    VB.NET-Quellcode

    1. If myFormVersion2 Is Nothing Then existiertsewohlnich


    Und wie kann ich von der zweiten Version auf meine Hauptform zugreifen?
    Am besten gar nicht.
    Die Unter-Form soll gefälligst ein Event senden, wennsewas will.
    Gugge VeryBasics
    Und wennde das dort gesagte probieren willst, gugge Alles über Events

    Die zweite Version ist dafür gedacht um Daten innerhalb des Programms bequem umzuschaufeln.
    Ich möchte aber unterbinden dass in beiden Formversionen die gleiche Datenquelle angezapft wird. Hierfür muss ich jedoch bei jedem Wechsel der Datenquelle in einer der Formen eben dies abprüfen.

    Zudem möchte ich nicht dass nochmals eine zweite Version aufgerufen wird. Das heißt ich muss prüfen können, ob die zweite Form schon existiert.

    Das ist mir alles sehr schwammig und undurchsichtig.
    Üblicherweise (zB bei mir: ausnahmslos nie) braucht eine Anwendung nicht mehrere Datenquellen. Von was für Datenquellen ist ühaupt die Rede?
    Hi,

    erstmal danke für die vielen Infos ;)

    VB.NET-Quellcode

    1. If myFormVersion2 Is Nothing Then existiertsewohlnich

    macht soweit was es soll. Problem was auftritt ist:
    Form wurde als Duplikat erstellt. --> Funktion erkennt das.
    Duplikatsform wird geschlossen. --> Funktion denkt, dass die Duplikatsform noch existiert. :/

    Ich habe versucht mir nen eigenes Event zu basteln. Aber irgendwie empfängt nur die Duplikatsform das Event und nicht die "Hauptform". Gibt es da etwas zu beachten um die Events der Duplikatsform abzufangen?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    DuplikatForm erbt von Form erbt von ScrollableControl erbt von Panel erbt von Control.

    Control hat eine nützliche Methode für sowas:
    System.Windows.Forms.Control.IsDisposed() As Boolean

    reicht diese Info?

    das wäre gut, wenns so reichen täte, denn diese Informationen kannste auch selbst nachgucken, im ObjectBrowser.
    Und wenn man den zu nutzen versteht kann man anfangen mit programmieren.

    Das mittm Event issn anneres Thema, das danach.

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

    Hi,

    ich denke

    System.Windows.Forms.Control.IsDisposed() As Boolean
    bezieht sich darauf, wie ich heraus bekomme, ob die Kindform geschlossen ist :P

    Ich habe ja zwei verschiedene Baustellen.
    Einmal muss die Hauptform mitbekommen ob ihr Duplikat noch existiert und zum zweiten benötige ich noch eine Funktion mit der ich die zwei Formen miteinander kommunizieren lassen kann. Hierfür scheinen mir Events passend zu sein.
    Ich kriege es auch hin, dass ein Event ausgelöst wird inkl. Übergabe von einer Information. Jedoch bekommt nur die Form die das Event auslöst ihr Event mit, nicht aber die Andere Form.
    Ich hoffe das war verständlich ^^

    Ich denke man kann beides mit Events (wenn ichs denn mal gerafft habe) erschlagen, da ich dann über ein Event mitgeben kann: "bin geschlossen" oder sowat... (Ja, ich nehm dafür dann wohl nen Boolean und keinen String ^^). Zumal hat mich nu das Interesse gepackt ^^

    PS: Mit dem isDisposed kriege ich heraus ob ich die Form schon als Duplikat vorhanden habe. Passt ;)
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    MemoAnMichSelbst schrieb:

    Jedoch bekommt nur die Form die das Event auslöst ihr Event mit, nicht aber die Andere Form.

    Das ist nicht der Sinn von Events, dass der Sender es selbst empfängt.

    Derjenige, der den Sender erstellt hat, der Owner, soll es empfangen. Das geht am einfachsten, indem das SubObjekt als WithEvents-Klassenvariable deklariert wird, und dann kann man sich im Editor eine EventHandler-Methode generieren lassen, die das Event des SubObjekts behandelt.
    Habichdas in Alles über Events nicht erwähnt?
    Vielleicht hab ich es auch einfach nur nicht erkannt was mir da zum lesen vorgestellt wird :P

    Oder ich habe nen Verständnisfehler.
    Also mal kurz mein Vorgehen umrissen:
    Ich habe ne Klasse mit meinem Event. Da steht eigentlich nicht viel drin, da ich eigentlich nur nen Wert übergeben möchte:
    So... Ich hab weiter drüber nachgedacht...
    Ich habe die Duplikatsform folgendermaßen deklariert:

    VB.NET-Quellcode

    1. Friend WithEvents Form2 As frmInfo

    Aufgerufen wird diese dann logischerweise mit:

    VB.NET-Quellcode

    1. Form2 = New frmInfo

    Damit kann ich ja schonmal von der Hauptform auf die Duplikatsform über Form2. zugreifen.

    In der frmInfo habe ich das Event so deklariert:

    VB.NET-Quellcode

    1. Public Event MeinEigenesEvent(ByVal Uebergabe As String)
    2. Public Sub StarteEvent(ByVal Inhalt As String)
    3. RaiseEvent MeinEigenesEvent(Inhalt)
    4. End Sub


    Wenn die Duplikatsform was senden möchte, tut sie das über:

    VB.NET-Quellcode

    1. StarteEvent(Me.ComboBox.Text.ToString)


    Die frmInfo soll folgendermaßen die Daten empfangen:

    VB.NET-Quellcode

    1. Private Sub RecieveEvent(ByVal Uerbergabe As String) Handles Form2.MeinEigenesEvent
    2. If Me.zweitfenster Then
    3. HauptFormInfo = Uerbergabe
    4. End If
    5. End Sub


    Aber die Hauptform kreigt das Event immernoch nicht mit... :/
    Habe ich da nu nen dicken Denkfehler drin?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

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

    Das hatte ich dann auch schon gedacht und den Post oben angepasst ^^ Aber immernoch ne Macke drin.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Aber die Hauptform kreigt das Event immernoch nicht mit... :/
    Habe ich da nu nen dicken Denkfehler drin?

    ^^
    Und ich verstehe noch net so recht wieso nicht. Er läuft von der Hauptform garnicht in das Event herein.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Also wie gesagt. die Duplikatsform als WithEvents deklariere ich so:

    VB.NET-Quellcode

    1. Friend WithEvents Form2 As frmInfo


    wie du dieser Variable eine Duplikatform-Instanz zuweist

    Da verstehe ich gerade nicht was du meinst.
    Meinst du das:

    VB.NET-Quellcode

    1. Form2 = New frmInfo
    ?
    Und das Event behandel ich über:

    VB.NET-Quellcode

    1. Private Sub RecieveEvent(ByVal Uerbergabe As String) Handles Form2.MeinEigenesEvent
    2. If Me.zweitfenster Then
    3. HauptFormInfo = Uerbergabe
    4. End If
    5. End Sub


    Aber da ich das ja oben gepostet habe, denke ich mir gerade, dass du was anderes meinst. Aber dann verstehe ich nicht so recht was du wissen möchtest.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Ab und zu sollte man auch mal ne Pause machen XD
    Schande über mein Haupt... Da hab ich aber echt quer gedacht XD Problem hat sich erledigt^^
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D