Laden...

Aufruf einer WIndows-Form aus der Konsole

Erstellt von v1vec vor 14 Jahren Letzter Beitrag vor 14 Jahren 5.608 Views
V
v1vec Themenstarter:in
52 Beiträge seit 2006
vor 14 Jahren
Aufruf einer WIndows-Form aus der Konsole

Hallo

Ich verwende Visual Studio C# 2008 Express Edition und hab ein Konsolenprogramm erstellt das eine ebenfalls in dem Projekt enthaltene Form aufrufen soll. Der Aufruf an sich funktioniert auch ohne probleme, allerdings ist die Form dann immer im Hintergrund was sehr unschön ist - zumal die Konsole während der Zeit eh blockiert ist (was auch in meinem sinn ist). Der Dialog soll dazu verwendet werden das ergebnis der vorherigen berechnungen graphisch darzustellen. Auch das setzen der TopMost Variable in der Form hat nix gebracht.

Mein Code sieht derzeit so aus (gekürzt):


Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

Form1 F = new FormXY();
            
Application.Run(F);

Hat jemand ne idee woran das hängt und wie ich die form in den vordergrund bekomme ?

K
166 Beiträge seit 2008
vor 14 Jahren

F.StartPosition = FormStartPosition.CenterScreen;

//Und wenn du es als Modales Fenster haben willst, 
F.ShowDialog();



AFAIK müsste das so funktionieren...
Gruß Killerkruemel

V
v1vec Themenstarter:in
52 Beiträge seit 2006
vor 14 Jahren

danke schonmal, leider gehts aber trotzdem nich

der dialog is dann zwar in der mitte des bildschirms aber immernoch hinter der Konsole

Ich hab zum test mal folgendes gemacht (um es besser nachvollziehbar zu machen):

  • Neues Projekt -> Konsolenanwendung
  • Dem Projekt eine Form hinzugefügt (Form1)
  • using Verweis hinzugefügt (System.Windows.Forms)
  • in die Main funktion folgenden Code geschriebe:
Form1 F = new Form1();
F.StartPosition = FormStartPosition.CenterScreen;
F.ShowDialog();

das ergebnis is das die konsole zwar anhält bis ich die form schließe, aber die form bleibt beim start in hintergrund

hab ich vllt irgendwas vergessen ? X(

ps: weder F.TopLevel noch F.TopMost ändern da was dran 🙁

K
166 Beiträge seit 2008
vor 14 Jahren

Versuch mal F.Focus()

V
v1vec Themenstarter:in
52 Beiträge seit 2006
vor 14 Jahren

also das is alles sehr seltsam

(F.Focus() bringt leider auch keinen Erfolg, wahrscheinlich deshalb weil das Fenster davon ausgeht das es den Focus hat (wird auch als aktiv gezeichnet))

nach ner weile googlen hab ich rausgefunden das es einen bug im visual studio gibt der genau dieses verhalten (form hinter konsole) hervorruft wenn man das programm direkt aus der entwicklungsumgebung aufruft

allerdings ist das nicht alles, dieses verhalten tritt für den fall das man das programm direkt aus dem ordner aufruft auch dann auf wenn man zuvor einen Read befehl ausgeführt hat

folgendes funktioniert also richtig (wenn man es aus dem ordner aufruft

static void Main(string[] args)
{
Form1 F = new Form1();
F.ShowDialog();
}

das hingegen nicht:

static void Main(string[] args)
{
Console.ReadKey();
Form1 F = new Form1();
F.ShowDialog();
}

sinn macht das ja keinen - leider brauch ich aber ReadLine() und ReadKey()
falls jemand also ein workaround weiß - immer her damit
ansonsten schonmal danke, ich denke wir werden auf ein update des studios warten müssen -.-

109 Beiträge seit 2008
vor 14 Jahren

und wenn du die form topmost machst?

V
v1vec Themenstarter:in
52 Beiträge seit 2006
vor 14 Jahren

also irgendwie wird das alles immer seltsamer:
wenn ich topmost schon im vorhinein oder mit dem OnLoad-Ereignis setze passiert nichts (bzw. genau das gleich wie als hätt ich es nich gesetzt) - setze ich topmost hingegen erst (oder wieder) wenn das fenster aktiv ist (z.B. durch OnClick) funktioniert es

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo v1vec,

seltsam schon, aber ein Workaround ist doch damit trotzdem möglich, oder nicht?

herbivore

1.696 Beiträge seit 2006
vor 14 Jahren

Hallo v1vec,

ich weiss nicht was du hast, aber ich habe grad probiert und es funktioniert ohne Probleme: im VS eine ConsoleAnwendung erstellt, dann eine Form dazu, in Program.cs:


using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadKey();
            Form1 f = new Form1();
            f.ShowDialog();
        }
    }
}

et voilà, Form1 kommt sofort und ist im Vordergrund es hat nur nicht den Focus, oder verstehe ich dich was falsch?

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

5.299 Beiträge seit 2008
vor 14 Jahren

Ich find Konsole-Anwendungen eh ziemlich Benutzerfeindlich.
Und wennde ein Form anzeigst, musste die WinFormLib sowieso laden.
Da könnte man doch auch gleich eine ordentliche Anwendung von machen?

Der frühe Apfel fängt den Wurm.

K
166 Beiträge seit 2008
vor 14 Jahren

Bei mir das gleiche wie beim vbprogger.... Consolenapp erstellt und die Form springt bei aufruf inFocus.... vllt hat dein studio n schluckauf oder so -
wenn die maße passen, warum ordnest du console und window nicht einfach nebeneinander an?

V
v1vec Themenstarter:in
52 Beiträge seit 2006
vor 14 Jahren

danke für eure hilfe

letztendlich lags wohl doch an dem visual studio - bei einem anderen projekt gings nämlich später als ichs nochmal probiert hatte - hab nur vergessen hier nochmal zu schreiben 😉

gruß

v1vec