Diskuze: C# winform - otevření okna konzole v aplikaci winform
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 2 zpráv z 2.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
tak nakonec jsem to sám vyřešil takto (kdyby to náhodou v budoucnu někoho
zajímalo):
Do třídy DebugConsole jsem pridal zobrazení a skrytí okna konzole a trochu
upravil:
public class DebugConsole
{
[DllImport("kernel32.dll")]
private static extern Boolean AllocConsole();
[DllImport("kernel32.dll")]
private static extern Boolean FreeConsole();
[DllImport("Kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("User32.dll")]
static extern int ShowWindow(IntPtr hwnd, int nShow);
private bool spustCon = false;
private static bool zobrazCon = false;
private static string hlavickaCon = "";
public DebugConsole()
{
}
public void SpustConsole(bool spust)
{
if (spust == true)
{
AllocConsole();
spustCon = true;
}
else
{
FreeConsole();
spustCon = false;
}
}
public void ZobrazConsole(bool zobraz, string hlavickaConsole)
{
hlavickaCon = hlavickaConsole;
if (zobraz == true)
{
IntPtr hwnd = GetConsoleWindow();
int ret = ShowWindow(hwnd, 5);
zobrazCon = zobraz;
Console.Title = hlavickaConsole;
Console.WriteLine(hlavickaConsole);
Console.WriteLine("".PadLeft(hlavickaConsole.Length, '*'));
}
else
{
Console.Clear();
IntPtr hwnd = GetConsoleWindow();
int ret = ShowWindow(hwnd, 0);
zobrazCon = zobraz;
}
}
public void WriteLine(string vypisText)
{
Console.WriteLine(vypisText);
}
public void SmazaniConsole()
{
Console.Clear();
}
}
V hlavním formu si vytvořím instanci třídy DebugConsole
DebugConsole debugCon = new DebugConsole();
A v konstruktoru MainFormu (hlavním formu) spustím okno konzole a hned ho skryji:
public MainForm()
{
InitializeComponent();
debugCon.SpustConsole(true);
debugCon.ZobrazConsole(false, "Konzole");
}
}
V události klik na tlačítko na hlavním formu, kterým otevírám další form si přes konstruktor nového formu předám instanci třídy DebugConsole....
private void btn_Click(object sender, EventArgs e)
{
Form NovyForm = new NovyForm(debugCon);
NovyForm.ShowDialog();
}
V novém formu pak v konstruktoru převeznu ukazatel na instanci třídy DebugConsole vytvořenou v MainForm. A v události NovyForm_Load zobrazim skryté okno konzole a můžu do něj zapisovat. Když nový form ukončím a následně opět spustím přes tlačítko na hlavním formu (MainForm) vše funguje...
public partial class NovyForm: Form
{
protected DebugConsole debugCon;
public NovyForm(DebugConsole konzole)
{
InitializeComponent();
debugCon = konzole;
}
private void NovyForm_Load(object sender, EventArgs e)
{
debugCon.ZobrazConsole(true, "DEBUG mód pro NovyForm");
debugCon.WriteLine("Okno nového formuláře bylo úspěšně spuštěno.");
}
}
Tak snad je to srozumitené a dobře
Zobrazeno 2 zpráv z 2.