Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Michal Pflegshörl:13.9.2018 12:44

Ahoj všem,
Tímto kódem

Form_Novy Novy = new Form_Novy();
Novy.Start();

Otevírám následující formulář

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

namespace Projekt
{
    string[] VybraneSoubory;

    public partial class Form_Novy : Form
    {
        public void Start()
        {
            System.Threading.Tasks.Task.Run(() =>
            {
                this.ShowDialog();
            });
        }

        public Form_Novy()
        {
            InitializeComponent();
        }

        private void button_VyberSoubor_Click(object sender, EventArgs e)
        {
            OpenFileDialog VyberSouboru = new OpenFileDialog();
            VyberSouboru.Title = "Vyberte soubor";
            VyberSouboru.Multiselect = true;
            if (VyberSouboru.ShowDialog() == DialogResult.OK)
            {
                VybraneSoubory = VyberSouboru.FileNames);
            }
        }

        private void button_Zpracuj_Click(object sender, EventArgs e)
        {
            .....
        }
    }
}

Bohužel řádek if (VyberSouboru­.ShowDialog() == DialogResult.OK) nejen, že nezobrazí výběr souborů, ale způsobí zavření Form_Novy.

Zkusil jsem: Všechno možné

Chci docílit: Potřebuji aby se v takto otevřeném Form_Novy zobrazilo okno pro výběr souborů.
Formulář otevírám pomocí metody Start protože potřebuji docílit toho, že mezitím co Form_Novy bude provádět metodu button_Zpracuj_Click může uživatel dále bez omezení pracovat ve formuláři, ze kterého byl Form_Novy otevřen.

 
Odpovědět
13.9.2018 12:44
Avatar
Odpovídá na Michal Pflegshörl
Michal Štěpánek:13.9.2018 15:43

Podle mě pleteš dohromady "otevírání" dialogu a "výběr" tlačítka. Myslím, že ShowDialog() se nemůže spojovat s DialogResult.OK.

Nahoru Odpovědět
13.9.2018 15:43
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jiří Hlaváček:14.9.2018 0:56

No mně přijde divný hlavně to, že z jednoho vlákna otevíráš druhý a v tom druhým vlákně použiješ

this.ShowDialog();

čímž používáš metodu objektu vytvořeného v tom prvním. Vždycky, když jsem pracoval nebo experimentoval s vlákny, tak s tím byl problém (Cross Threading) a ne vždycky to Visual Studio hlásilo jako chybu - někdy to jen spadlo.
Nebude lepší v druhým vlákně dělat to zpracování, ať už to je cokoliv?

 
Nahoru Odpovědět
14.9.2018 0:56
Avatar
Luboš Běhounek Satik:14.9.2018 2:11

Presne tak, mas tam bordel ve vlaknech. Ten kod v metode start uprav a vyhod tam ten threading task.

Pokud by sis ten kod co zavre okno hodil do try/catch, videl bys, ze to tam hazi vyjimku. Muzes si ji i aktivovat v Debug->Windows->Exception Settings a tam zaskrtnout celou vetev Common Language Runtime Exceptions.

Pripadne to cely muzes prekopat a misto volani Start jen rovnou na instanci tohohle formu zavolas nazevinstance­.ShowDialog() .

Pokud bys chtel mit vic logiky v metode start, tak pak jen pouzijes OnShow() u formulare.

Nahoru Odpovědět
14.9.2018 2:11
https://www.facebook.com/peasantsandcastles/
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 4 zpráv z 4.