27 Stimmen

Elternformular der Komponente abrufen

Ich habe eine nicht-visuelle Komponente, die andere visuelle Steuerelemente verwaltet.

Ich benötige einen Verweis auf das Formular, auf dem die Komponente ausgeführt wird, aber ich weiß nicht, wie ich es bekommen kann.

Ich bin unsicher, einen Konstruktor mit der übergeordneten als Kontrolle angegeben hinzufügen, wie ich die Komponente zu arbeiten, indem nur in den Designer fallen gelassen werden soll.

Der andere Gedanke, den ich hatte, war eine Eigenschaft der Eltern als ein Steuerelement, mit dem Standardwert als 'Me' haben

jede Anregung wäre großartig

Bearbeiten:

Zur Klarstellung: Dies ist eine Komponente , nicht ein Kontrolle , siehe hier: ComponentModel.Component

1voto

Mark Punkte 180

Danke Rob, ich habe deine Lösung in einem VB.Net-Programm verwendet, das wie folgt aussieht:

''' <summary>
''' Returns the parent System.Windows.form of the control
''' </summary>
''' <param name="parent"></param>
''' <returns>First parent form or null if no parent found</returns>
''' <remarks></remarks>
Public Shared Function GetParentForm(ByVal parent As Control) As Form
    Dim form As Form = TryCast(parent, Form)
    If form IsNot Nothing Then
        Return form
    End If

    If parent IsNot Nothing Then
        ' Walk up the control hierarchy
        Return GetParentForm(parent.Parent)
    End If

    ' Control is not on a Form
    Return Nothing
End Function

Ich habe es in meinem Blog erwähnt: http://www.dailycode.info/Blog/post/2012/07/03/How-to-get-a-user-controls-parent-form-(Windows-Formulare).aspx

1voto

sandipmatsagar Punkte 29

Versuchen Sie dies ....

private Form GetParentForm(Control parent)
{
    if (parent is Form)
        return parent as Form;

    return parent.FindForm();
}

Rufen Sie an. GetParentForm(this.Parent) von Bauteil

0voto

arul Punkte 13880

Ich denke, Sie wollen die Eigenschaft Site der IComponent verwenden. Sie ist mehr oder weniger ein Äquivalent zur Parent-Eigenschaft.

0 Stimmen

Jede Chance, die Sie ein wenig genauer bitte sein könnte? Ich habe einen Blick auf die Website-Eigenschaft während der Fehlersuche hatte, und es scheint nichts zu sein, die das übergeordnete Formular verweist.

-4voto

GeoB Punkte 55

Eine Verbesserung von oben ist:

public static Form ParentForm(this Control ctrl) => ctrl as Form ?? ctrl.FindForm();

-4voto

Pollitzer Punkte 1526

Wenn die Komponente mit Form ist die aktive Form können Sie es erhalten durch Form.ActiveForm .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X