NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Milan
Člen
Avatar
Milan:1.2.2018 8:49

Ahoj,

potřeboval bych poradit s modeless dialogem. Udělal jsem si jednoduchý texťák, ale když chci aby mi zůstalo okno aktivní i po otevření dialogu, tak bych měl použít modeless.

private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
    using (Notepad.frmAbout1 frm = new Notepad.frmAbout1())
    {
        frm.Show();
    }

A nejsem schopen vygooglit co dělám špatně a proč se mi okno hned po otevření zavře.

Tady je to okno About.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Notepad
{
    public partial class frmAbout1 : Form
    {
        public frmAbout1()
        {
            InitializeComponent();
        }

        private void frmAbout1_Load(object sender, EventArgs e)
        {
            lblProductName.Text = string.Format("Product name: {0}", Application.ProductName);
            lblProductVersion.Text = string.Format("Version: {0}", Application.ProductVersion);
            lblCopyright.Text = ("Copyright ©  2018 by abcd");
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void lblProductName_Click(object sender, EventArgs e)
        {

        }

        private void lblCopyright_Click(object sender, EventArgs e)
        {

        }

        private void lblCopyright_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.abcd.cz");
        }
    }
}

Díky moc za případné rady.

Editováno 1.2.2018 8:50
 
Odpovědět
1.2.2018 8:49
Avatar
Odpovídá na Milan
Erik Šťastný:1.2.2018 9:03

No nejsem si jistý co v .NET, ale v C++(Qt) by se tvůj kód choval úplně stejně,

//Okno se vytvoří
using (Notepad.frmAbout1 frm = new Notepad.frmAbout1())
{
    //Okno se zobrazí
    frm.Show();
//Ihned po zobrazení skončí Using a zase zmizí?
}

V Qt se musí na dialogu zavolat QDialog.exec() a ne QDialog.show(), není zde něco podobného?

Editováno 1.2.2018 9:04
 
Nahoru Odpovědět
1.2.2018 9:03
Avatar
Milan
Člen
Avatar
Milan:1.2.2018 9:28

No podle mě ne. Už jsem projel asi 1000 tutoriálů a všude jim to funguje tak, jak to mám já. :-) Zkusil jsem vytvořit úplně nový program , ale nic se nezměnilo.

 
Nahoru Odpovědět
1.2.2018 9:28
Avatar
Odpovídá na Milan
Michal Štěpánek:1.2.2018 10:30

Nějak nechápu, k čemu tam je ten "using"?

using (Notepad.frmAbout1 frm = new Notepad.frmAbout1())
    {
        frm.Show();
    }

proč tam není jen

frmAbout1 frm = new frmAbout1();
frm.Show();

?

Nahoru Odpovědět
1.2.2018 10:30
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Neaktivní uživatel:1.2.2018 10:43

Skusil by som u toho okna, ktore chces zobrazit nastavit:

  • Owner
  • TopMost = true
Nahoru Odpovědět
1.2.2018 10:43
Neaktivní uživatelský účet
Avatar
Odpovídá na Michal Štěpánek
Erik Šťastný:1.2.2018 11:10

Yep souhlasím, taky si myslím, že se to zavírá kvůli usingu, protože to prostě opustí scope... a okno se disposne, chápu správně?

Ale nejsem .NETář, tak na to nevsázím :)

Editováno 1.2.2018 11:11
 
Nahoru Odpovědět
1.2.2018 11:10
Avatar
Milan
Člen
Avatar
Milan:1.2.2018 11:14

Ano, když jsem ten using smazal

private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
    Notepad.frmAbout1 frm = new Notepad.frmAbout1();
    frm.Show();

tak to funguje, ale jak píše Michal

frmAbout1 frm = new frmAbout1();
frm.Show();

tohle mi nefunguje, nevím proč. Musím to mít napsané tak jak v tom první případě. Notepad.frmAbout. Na to jsem vlastně taky nepřišel, proč to nejde jak píšeš. V tutoriálech to tak psali taky, ale pak jsem to přestal řešit. :-)

 
Nahoru Odpovědět
1.2.2018 11:14
Avatar
Odpovídá na Milan
Erik Šťastný:1.2.2018 11:17

Protože to máš v namespace "Notepad" a to odkud to voláš očividně ne :)

 
Nahoru Odpovědět
1.2.2018 11:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.