Diskuze: Otvorenie dvoch a viac súborov

C# .NET .NET (C# a Visual Basic) Otvorenie dvoch a viac súborov American English version English version

Aktivity (3)
Avatar
Tadeáš Burda:25. července 22:34

Vytvoril som si jednoduchý prehliadač fotografií, ktorý funguje, ale iba pri prehliadaní jednej fotografie. Ak označím viac fotografií, tak Windows mi proste otvorí môj program n krát. Program sa spúšťa po kliknutí na fotografiu a jeho adresa sa predáva programu cez string[] args. Program je WPF a neobsahuje Main(string[] args) ako ConsoleApp, tak som na nete našiel návod ako upraviť App.xalm a App.Xalm.cs a tak mi to funguje. Do App.xalm sa pridá iba Startup="AppStar­tup" a do App.xalm.cs:

public partial class App : Application
{
    public static string[] Args;

    public void AppStartup(object sender, StartupEventArgs e)
    {
        if (e.Args.Length > 0)
            Args = e.Args;
    }

Adresa súboru je potom vo vlastnosti Args a odtiaľ si ju ťahá MainWindow pre ďalšie spracovanie.

Zkusil jsem: Viac menej nič som neskúšal, lebo Bingu nedokážem položiť správnu otázku. Stále mňa to odkazuje OpenFileDialog(), ale to nenič to čo chcem, pretože program sa má spúšťať napr. ako Skicár po kliknutí na súbor a nebude v ňom možnosť pre užívateľa otvárať iné súbory.

Chci docílit: Chcel by som, aby napr. po označený viacej fotografií a otvorení ich v mojom programe, boli v string[] args všetky adresy označených fotografii. Alebo aspoň teda zistiť či to vôbec ide :D

 
Odpovědět 25. července 22:34
Avatar
Jakub Augusta:26. července 8:13
OpenFileDialog _FileDialog = new OpenFileDialog();
_FileDialog.Multiselect = true;
_FileDialog.ShowDialog();
var Result = _FileDialog.FileNames;

Zkus toto.
Ve výsledku Result je pole obsahující přímou cestu k souboru.

Editováno 26. července 8:14
Nahoru Odpovědět 26. července 8:13
if(true == false) { Tu: DoDis() } else goto Tu;
Avatar
Odpovídá na Jakub Augusta
Tadeáš Burda:26. července 11:17

Áno, to viem... Ale to nie je to čo chcem. Nechcem aby užívateľ musel otvoriť program a tam napr. v menu otvoril dialóg a vyberal súbory(to viem spraviť). Chcem aby si užívateľ napr. na ploche označil myšou viac fotografií a po kliknutí v ContextMenu na Otvoriť sa mi do programu dostali adresy tých označených súborov. Z jedným to dokážem urobiť, ale kde ich označím viacej tak mi proste Windows otvorí môj program n krát, kde n je počet označených súborov. PS: Nechcem to nijako obísť. Je to pre študijne účely a viem že to ide.

 
Nahoru Odpovědět 26. července 11:17
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Tadeáš Burda
patrik.valkovic:26. července 12:43

Out of the box to myslím nejde. Musíš použít mezi procesorovou komunikaci a poslat již spuštěnému procesu zprávu, že má otevřít další soubor.
https://stackoverflow.com/…-application

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 26. července 12:43
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Tadeáš Burda:26. července 13:20

Napr. WindowsMediaPlayer to dokáže. Keď si označíš mp3, tak ti prehrá len tie označené, preto viem že to ide. Pozeral som tu na ten Mutex článok včera a napadlo mňa, že by sa to dalo spraviť tak, že by som zablokoval otvorenie programu viac krát a len sa pozrel do danej zložky, že ktoré ďalšie súbory sú označené, alebo že by mi tie druhé procesy poslali len cesty. Ja som až včera zistil, že sa dá programu predať adresa súboru cez string[] args tak som myslel, že sa tak predajú všetky označené. Bolo by to elegantnejšie :D Pozriem sa na ten Mutex

 
Nahoru Odpovědět 26. července 13:20
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Tadeáš Burda
patrik.valkovic:26. července 19:08

Ale to řešení přesně toto dělá. Spustí další aplikaci, ta zjistí že je již jednou spuštěna a tak pomocí meziprocesové komunikace pošle zprávu, ať ta aplikace otevře i ten druhý soubor.

Nahoru Odpovědět 26. července 19:08
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na patrik.valkovic
Tadeáš Burda:27. července 12:55

Už sem sa nato pozeral a spravil sem to tak, až nato, že sem si ešte nevybral spôsob tej komunikácie, lebo ich je viac. Mne len došlo divne, že sa to musí robiť takto zložito, keď string[] args je pole, tak som čakal že tam budú všetky adresy. Cez ten Mutex som sa dostal na iné fóra a vyzerá to, že naozaj sa to da len takto :/ Takže som ta označil. Mohel by tu niekto nato spraviť návod, lebo moc info sem tu nato nenašiel (hľadal sem len C#). Každopádne díky moc...

 
Nahoru Odpovědět 27. července 12:55
Avatar
Odpovídá na Tadeáš Burda
Andy Scheuchzer:27. července 16:34

Zrovna C# těch návodů potřebuje víc… :-D

Nahoru Odpovědět  +1 27. července 16:34
Od ASM úroveň jazyků pouze klesá…
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Andy Scheuchzer
patrik.valkovic:27. července 19:02

Jaké konkrétně?

Nahoru Odpovědět 27. července 19:02
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na patrik.valkovic
Andy Scheuchzer:27. července 19:47

To by byl delší seznam, a navíc si nikdy nevzpomenu na víc najednou… Např. v práci se soubory jsem nikde neviděl JSON… ;-(

Nahoru Odpovědět 27. července 19:47
Od ASM úroveň jazyků pouze klesá…
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Andy Scheuchzer
Martin Petrovaj:27. července 21:10

Súhlasím, že pár nových článkov navyše by možno nezaškodilo, ale človek musí byť asi politik z povolania, aby dokázal o volaniach 2 metód (JsonConvert.Se­rializeObject a JsonConvert.De­serializeObjec­t<T>) napísať článok na viac ako 5 riadkov :-) A v najhoršom prípade každý, kto ovláda aspoň základnú angličtinu je schopný vytvoriť správny search phrase pre Google a kliknúť na prvý SO odkaz.

Mimochodom, prepáč, že som sa chytil len jedného príkladu, ktorý si dal, len si si náhodou vybral práve takú vec, ktorá väčšine ľudí za článok ani veľmi nestojí :-) A aby som dodal aj niečo k téme, Mutex a / alebo iná komunikácia medzi procesmi vyzerá ako najlogickejšie riešenie pre tu rozoberaný problém.

Editováno 27. července 21:12
Nahoru Odpovědět 27. července 21:10
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Martin Petrovaj
Andy Scheuchzer:28. července 9:12

Tobě stačí znát názvy dvou metod? A navíc jsem myslel, že by tady měly články pokrýt trošku víc než pokrývají. No to je jedno, částečně tě chápu, tak radši téma JSON ve vláknu Mutex uzavírám :-D.

Nahoru Odpovědět 28. července 9:12
Od ASM úroveň jazyků pouze klesá…
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda:28. července 12:01

No ja by sem ocenil, keby tu bolo viac článku o "technikách" ktoré sa v praxi používajú. Sú tu programátori z praxe a keď prejdem všetky články v daném jazyku, tak už mňa zajíma zrovna toto. Ale ja články nepíšem, len sem to hodil do placu, že bych zato byl ochotný zaplatiť. Asi bych to už uzavrel...

 
Nahoru Odpovědět  +1 28. července 12:01
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 13 zpráv z 13.