Entwickler-Ecke

WinForms - Formular öffnen aus anderem Projekt


c#ler - Di 09.08.11 16:09
Titel: Formular öffnen aus anderem Projekt
Hallo,
Ich habe in meiner Projektmappe 2 Projekte,
nun habe ich das eine Projekt, in der sich nicht die Form befindet als Startprojekt gesetzt.
Nun möchte ich gern wissen, wie ich aus einer klasse des einen Projekts, die Form des anderen Projekts aufrufen kann.


C#-Quelltext
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:
27:
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace Plugin.Fahrerbuch
{
    public class Fahrerbuch : BasePlugin
    {
        public Fahrerbuch()
            : base("Fahrerbuch Plugin""Fahrerbuch")
        {
        }

        public override void Initialize(IPluginManager pluginManager)
        {
        }
        
        protected override void MenuItemActivated()
        {
            //ShowDialog(Form_main());
            //Application.Run(new Form(Form_main));
        }
    }
    
}


So schaut es bis jetzt aus, aber leider funktioniert das so nicht.


dark-destination1988 - Di 09.08.11 16:12

prinzipiell ist diese Variante verkehrt. nutze dein Formprojekt als Startprojekt und binde deine Klassenbibo oder was auch immer darin ein.


c#ler - Di 09.08.11 16:15

user profile icondark-destination1988 hat folgendes geschrieben Zum zitierten Posting springen:
prinzipiell ist diese Variante verkehrt. nutze dein Formprojekt als Startprojekt und binde deine Klassenbibo oder was auch immer darin ein.


Vielen Dank für die schnelle Antwort, jedoch:
Das Aktuelle Startprojekt schreibt mein Form-Projekt als .dll
Es ist also nicht möglich das Formprojekt als Startprojekt zu nutzen, da meines Wissens nach erst die Umwandlung und dann der Aufruf erfolgen muss..

Die .dll widerum wird später in einer externen Application genutzt. (Plugin)


Th69 - Di 09.08.11 16:17

Hallo c#ler,

du mußt zuerst einen Verweis (Referenz) auf das andere Projekt zu deinem Start-Projekt hinzufügen (Verweise -> Verweis hinzufügen...).
Und dann evtl. noch den Namensbereich im Code beachten (entweder per 'using' einbinden oder aber vor dem Form-Namen hinzufügen).
Nun kannst du einfach mit

C#-Quelltext
1:
2:
OtherForm form = new OtherForm();
form.ShowDialog(this);

das andere Formular aufrufen.


dark-destination1988 - Di 09.08.11 16:19

naja ok das was Th69 schreibt ist richtig, allerdings musst du die klasse finden die beim start aufgerufen wird


c#ler - Di 09.08.11 17:00

Vielen Dank für die Antworten.
Ich werde mich mal damit auseinandersetzen.
Ich schreibe morgen mal, was bei rausgekommen ist.


c#ler - Mi 10.08.11 14:00

Wie erstelle ich einen Verweis korrekt?
Ich komme damit nicht klar.

Ich habe bei meinem Projekt einen Verweis hinzugefügt auf mein anderes Projekt.
Nun kann ich aber immernoch nicht wie gewünscht auf mein Formular zugreifen.
Wenn ich "Form1." eingebe, zeigt Autocomplete mir dann Controlfunktionen statt Formfunktionen..
Wie sage ich jetzt meiner Klasse, dass es auf eine Form zugreift?
Was mache ich falsch?

Wenn ich in meiner Klasse ein neues Formular erstelle
Form Form1 = new Form();
Form1.ShowDialog();
dann funktioniert das....jedoch wird mir jetzt natürlich nur das leere Formular angezeigt..


bakachan - Mi 10.08.11 14:20

Du musst den NamesSpace des Formulars mit angeben oder oben per using einbinden.


c#ler - Mi 10.08.11 14:31

user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
Du musst den NamesSpace des Formulars mit angeben oder oben per using einbinden.

mach ich ja^^

dann kommt beim Aufruf:
Für das nicht statische Feld, die Methode oder die Eigenschaft "System.Windows.Forms.Form.ShowDialog()" ist ein Objektverweis erforderlich.


bakachan - Mi 10.08.11 14:52

Sehe ich das richtig das deine Form-Klasse "Form1" heisst? Dann solltest du das auch als Typ hinschreiben und eine Instanz dieser Klasse erstellen. An dieser Instanz / diesem Objekt kannst du dann die Show-Funktion aufrufen.

Einfache Variablendeklaration -> Grundlagen.

C#-Quelltext
1:
2:
3:
Typ variablenName;
int zähler;
Form1 meinFormObjekt;


c#ler - Mi 10.08.11 15:12

user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
Sehe ich das richtig das deine Form-Klasse "Form1" heisst? Dann solltest du das auch als Typ hinschreiben und eine Instanz dieser Klasse erstellen. An dieser Instanz / diesem Objekt kannst du dann die Show-Funktion aufrufen.

Einfache Variablendeklaration -> Grundlagen.

C#-Quelltext
1:
2:
3:
Typ variablenName;
int zähler;
Form1 meinFormObjekt;


Ich habe es wahrscheinlich etwas blöd beschrieben:

- Meine Formularklasse heißt Form1.cs
- In dieser haben ich eine public partial class Form_main : Form (ist von Form abgeleitet)
- in dieser befindet sich die Hauptfunktion public Form_main().

- Ich habe in meinem anderen Projekt (in der selben Projektmappe)
eine Klasse Fahrerbuch.cs
- In dieser Klasse soll der Aufruf des Form_main erfolgen. "Form_main.ShowDialog();"
Was muss ich tun, damit Ich auf Form_main zugreifen kann?

Ich habe bereits versucht eine Form2 zu erstellen
Form Form2 = new Form();
Form2.ShowDialog(this);

this verweist ja auf die Aktuelle Instanz der Klasse, aber ich glaube ich habe diese Instanz nicht richtig deklariert


bakachan - Mi 10.08.11 15:22

Wie die Datei heisst ist egal nur der Name der Klasse ist wichtig. (Wegen der Übersichtlichkeit sollte man aber die Datei genauso benennen wie die beinhaltete Klasse.)

Form_main ist also deine Klasse.
Zitat:
- in dieser befindet sich die Hauptfunktion public Form_main().

Das ist der Konstruktor, damit erstellst du ein Objekt der Klasse:

C#-Quelltext
1:
Form_main meineVariable = new Form_main();                    


und an diesem Objekt kannst du dann deine Funktion aufrufen

C#-Quelltext
1:
meineVariable.ShowDialog();                    


Ich empfehle dir mal ein Buch oder Tutorial über die Grundlagen der Objektorientierung zu lesen, damit du den Unterschied/Zusammenhang zwischen Klassen und Objekten verstehst.


c#ler - Mi 10.08.11 15:37

ach misst.
Vielen Dank. Fehler erkannt...ich Faste zur Zeit, da is meine Konzentration gering. Sorry, dass ich euch deswegen jetzt unnütz gestresst hab. Ich habe die ganze Zeit versucht ne neue Klasse zu erstellen, statt eine Variable, was natürlich unsinn ist.
Vielen Dank für die Hilfe und ein verschämtes bis bald :oops: