Uruchomienie programu po naciśnięciu przycisku...

Witam Jestem początkującym programistą i bawię się programem Sharpdevelop Chciałem prosić o pomoc zaawansowanych programistów, wiem że być może jest gdzieś na forum w jakimś poście odpowiedź na moje pytanie ale ja jej nie znalazłem... więc pytam :) Utworzyłem nowy projekt w sharpdevelop w języku c++ --> Aplikacje Windows --> Formatka Aplikacje Windows W tą formatkę wrzuciłem jeden przycisk dajmy na to że tekst tego przycisku to "Uruchom" a nazwa "start" i teraz wygląda to tak: void StartClick(object sender, EventArgs e) { //jaką komendę i co muszę tu wpisać aby uruchomić zewnętrzny program np. Notepad.exe //który wiadomo gdzie się znajduje... c:\Windows\Notepad.exe } Wcześniej kombinowałem z Application.Run(); Ale to nie wypaliło, a w necie znalazłem różne rozwiązania ale jak do tej pory żadne nie zadziałało... ](*,) Błagam pomocy...

Odpowiedzi: 16

Dzięki za odpowiedź :mryellow: Sposób ze schowkiem jest doskonały w swej prostocie... A jeśli chodzi o Rzut plikiem na formę... to masz rację, powinno to działać Przy DragDrop :-k Próbowałem stworzyć coś takiego jak strefa zrzutu dla plików... [code]FolderBrowserEdit = new System.Windows.Forms.FolderBrowserDialog(); if ( FolderBrowserEdit.ShowDialog() == System.Windows.Forms.DialogResult.OK) { string[] pliki = (string[])e.Data.GetData(DataFormats.FileDrop); System.IO.File.Copy(pliki[0], FolderBrowserEdit.SelectedPath); }[/code] Ale niestety sobie nie radzę, pojawiają się 2 problemy: Pierwszy po rzuceniu pliku na formę, uruchamiają się dwa okienka wyboru folderu jedno po drugim... Może to wynikać ze sposobu w jaki plik dostaje się na formę bo powinien przed DragDrop, a idzie przez DragEnter lub DragLeave A drugi to że nie kopiuje pliku :-k
Cyber Phantom
Dodano
28.11.2009 00:56:31
Hmm... [quote]System.IO.DriveInfo[] di = System.IO.DriveInfo.GetDrives();[/quote] Coś nie mogę tego zastosować :-k Wiesz może jak przechwycić wpis dla schowka systemowego? np. Jak kopiuję tekst gdzieś tam, w przeglądarce czy gdzie kolwiek to żeby automatycznie wklejało go do RichTextBox-a w ukrytej formatce? Lub Czy wiesz może w jaki sposób wykonać takie działanie? Wrzucam jakiś plik z pulpitu na otwartą formatkę i przekopiowuje mi go gdzieś tam w jakiś katalog... Muszę sobie kupić książkę o C# żeby cię tak nie zadręczać AndrewSpec :mryellow:
Cyber Phantom
Dodano
26.11.2009 09:00:49
  • AndrewSpec 27.11.2009 16:38:43

    [quote=Cyber Phantom]Hmm... [quote]System.IO.DriveInfo[] di = System.IO.DriveInfo.GetDrives();[/quote] Coś nie mogę tego zastosować :-k [/quote] To jest zwykła tablica. Do jej elementów dobierasz się podając numer indeksu np: di[0], di[1] itd, potem po kropce możesz dobrać się do właściwości i metod dla poszczególnego elementu np: [code] di[9].DriveType [/code] [quote=Cyber Phantom] Wiesz może jak przechwycić wpis dla schowka systemowego? np. Jak kopiuję tekst gdzieś tam, w przeglądarce czy gdzie kolwiek to żeby automatycznie wklejało go do RichTextBox-a w ukrytej formatce? [/quote] Ja bym to zrobił w trochę lamerski sposób ;) Trzeba dodać timera do formy, włączyć go (Enabled na True) i dla zdarzenia Tick wkleić wpisać coś takiego: [code] textBox1.Text = Clipboard.GetText(); //przy założeniu, że tekst ma być w textBox1 [/code] Ale żeby np monitorować schowek i nie dodawać tej samej zawartości, możesz zrobić taki myk: dodaj jakąś zmienną globalną tmp typu string a potem w zdarzeniu Tick: [code] if (tmp != Clipboard.GetText()) { textBox1.Text += '\n' + Clipboard.GetText(); tmp = Clipboard.GetText(); } [/code] Czyli w skrócie - jeżeli zmienna tmp różni się od aktualnej zawartości schowka (czyli coś w schowku się zmieniło) do textBox1 zostanie dodana zawartość schowka (dodana a nie nadpisana tak jak w poprzednim przykładzie) [quote=Cyber Phantom] Czy wiesz może w jaki sposób wykonać takie działanie? Wrzucam jakiś plik z pulpitu na otwartą formatkę i przekopiowuje mi go gdzieś tam w jakiś katalog... [/quote] Ustawiasz właściwość AllowDrop w formie na True i do zdarzenia DragDrop wklepujesz np takie coś: [code] string[] pliki = (string[])e.Data.GetData(DataFormats.FileDrop); System.IO.File.Copy(pliki[0], "C:\\jakis_plik.exe"); [/code] Z tym, że u mnie to nie za bardzo chciało działać...jak dodałem kod do DragEnter to było ok (chociaż na chłopski rozum tamto musi być ok) więc pewnie coś przeoczyłem :)

Spoks... Muszę pomyśleć :mryellow:
Cyber Phantom
Dodano
25.11.2009 18:32:27
Odczyt listy wszystkich napędów robi się przez: [code] System.IO.DriveInfo[] di = System.IO.DriveInfo.GetDrives(); [/code] Ale jak potem zrobić dump napędu to nie mam pojęcia ;) Pewnie trzeba bit po bicie odczytać i zapisać ale nigdy czegoś takiego nie robiłem i nie wiem... :)
AndrewSpec
Dodano
25.11.2009 18:25:54
Aktualnie mam w zamyśle stworzenie prostego programiku... w zasadzie już taki mam ale nie ja go stworzyłem i nie wiem jak działa... W Formatce tegoż programiku są 3 elementy... ComboBox, Button i coś co w zasadzie ma wyglądać jak ProgressBar W ComboBox-ie wyświetlone są napędy... Zaś przycisk ma wyświetlić okno Zapisu do pliku *.iso Zresztą spójrz sam: [quote]http://www.wikifortio.com/708917/ISO Kreator.exe[/quote] Ma ledwo 200Kb Czy potrafiłbyś utworzyć podobny kod? Jaki jest zawarty w tym programie?
Cyber Phantom
Dodano
25.11.2009 18:02:30
Klasy w .NET są bardzo intuicyjnie rozmieszczone. Czasami można samemu dojść do rozwiązania problemu ;) Czytaj jakieś książki o C#, zaglądaj na codeguru.pl i dużo programuj. Wg mnie najważniejsze jest doświadczenie więc im więcej czasu spędzisz na kodzeniu tym lepiej.
AndrewSpec
Dodano
25.11.2009 17:54:59
Git... Niby nie jest to trudne gdy już się wie jak to zrobić... Ale jak kombinowałem metodą prób i błędów to mi nie wychodziło :mryellow:
Cyber Phantom
Dodano
25.11.2009 17:33:41
Można zrobić proces odwrotny do tego, który podałem wcześniej, czyli zamiast klasy StreamWriter korzystasz z klasy StreamReader: [code] System.IO.StreamReader sr = new System.IO.StreamReader("plik.txt"); textBox1.Text = sr.ReadLine(); textBox2.Text = sr.ReadLine(); textBox3.Text = sr.ReadLine(); sr.Close(); [/code] Każde wywołanie ReadLine() będzie przenosiło odczyt strumienia do kolejnej linii więc jak chcesz np pominąć jakąś linię, wystarczy wywołać ReadLine() nie przypisując nigdzie tego co zwróci.
AndrewSpec
Dodano
25.11.2009 17:11:34
Woo... nieźle :wtf: A da radę tak zrobić żeby puźniej wczytał informacje do TextBox-a z poszczególnych linii?
Cyber Phantom
Dodano
25.11.2009 15:00:32
Ciekawe projekty... część z nich sobie sprawdzę :) Do Zawodowego Programisty nie wiele ci brakuje, szybko łapiesz o co Kaman Nawet jeśli moje zdania nie były zbyt dobrze sklecone, to i tak za każdym razem twoja odpowiedź była w 100% przydatna... Mam takie pytanko... dotyczy ono w dalszym ciągu TextBox-a W jaki sposób zapisać treść TextBox-a do pliku, po naciśnięciu przycisku? (Z RichTextBox potrafię to zrobić ale TextBox mi nie wychodzi) I w jaki sposób zapisać Formularz składający się z 3 TextBox-ów po naciśnięciu przycisku ale w taki sposób aby każdy z TextBox-ów zapisywał się w osobnej linijce? Lub w jaki sposób przejść z okna MainForm do Form1? (Standardowo zawsze uruchamia się MainForm, a jak zrobić żeby uruchomiła się druga forma?) Sorki że tak dużo tych pytań... :neutral:
Cyber Phantom
Dodano
24.11.2009 17:09:36
  • AndrewSpec 24.11.2009 23:39:38

    [quote=Cyber Phantom] W jaki sposób zapisać treść TextBox-a do pliku, po naciśnięciu przycisku? [/quote] Można np tak: Do zdarzenia obsługującego kliknięcie na przycisk dopisujesz: [code] System.IO.File.WriteAllText("plik.txt", textBox1.Text); [/code] Najprostszy sposób zapisu do pliku. Jeżeli podasz samą nazwę pliku bez dokładnej ścieżki to plik zostanie stworzony w katalogu z którego został uruchomiony program. [quote=Cyber Phantom] I w jaki sposób zapisać Formularz składający się z 3 TextBox-ów po naciśnięciu przycisku ale w taki sposób aby każdy z TextBox-ów zapisywał się w osobnej linijce? [/quote] Takie coś bym zrobił w inny sposób: [code] //tworzysz nowy obiekt do zapisu strumienia System.IO.StreamWriter sw = new System.IO.StreamWriter("plik.txt"); //zapisujesz zawartość każdego textBoxa w nowej linii sw.WriteLine(textBox1.Text); sw.WriteLine(textBox2.Text); sw.WriteLine(textBox3.Text); //zamykasz strumień - konieczne! sw.Close(); [/code] [quote=Cyber Phantom] Lub w jaki sposób przejść z okna MainForm do Form1? (Standardowo zawsze uruchamia się MainForm, a jak zrobić żeby uruchomiła się druga forma?) [/quote] Nie rozumiem pytania :D Daj jakiegoś screena w miarę możliwości.

  • Marcin_Miga 25.11.2009 09:01:13

    [quote=Cyber Phantom] Lub w jaki sposób przejść z okna MainForm do Form1? (Standardowo zawsze uruchamia się MainForm, a jak zrobić żeby uruchomiła się druga forma?) [/quote] [code]Form1 f = new Form1(); f.Show(); // lub f.ShowDialog();[/code]

Heeh, bo jeszcze popadnę w samozachwyt :D Wejdź sobie na mój blog (link jest w przycisku BLOG) i tam zobacz co już zrobiłem ;) Zawodowcem nie jestem bo dopiero jestem na 3cim roku infy;) Jeżeli tylko będę umiał Ci pomóc to chętnie pomogę.
AndrewSpec
Dodano
23.11.2009 23:38:26
To jest genialne... Sądząc po twoich wypowiedziach nie jesteś byle jakim programistą... Doskonale wiesz co robisz, i wróżę ci całkiem niezłą przyszłość :mryellow: To tak po za tematem... Będę miał jeszcze kilka pytań do ciebie... o ile zgodzisz się mi jeszcze pomóc?
Cyber Phantom
Dodano
23.11.2009 21:10:54
Przycisku nie trzeba wciskać...można prościej: Zaznaczasz tego ComboBoxa, z prawej strony masz okienko Properties (jak nie masz to Ctrl+W a potem P). Klikasz na ikonkę pioruna (to są zdarzenia). Domyślnie będzie zaznaczony event o nazwie SelectedIndexChanged. Klikasz 2x LPM w to puste pole, które jest obok nazwy eventu. Visual Studio automatycznie stworzy potrzebny kod i Twoim zadaniem jest jedynie uzupełnienie tego co ma się stać czyli w miejscu gdzie będziesz miał karetę wpisujesz np: [code] textBox1.Text = (string)comboBox1.SelectedItem; [/code] Czyli wartość tekst w textBox1 będzie miał wpisane to co jest aktualnie wybrane w comboBox1 (wybrany element z comboBox1 musi być rzutowany na string bo takiego typu jest właściwość Text w textBox1). Całość odpowiedzialna za tą zmianę wygląda np tak: [code] private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { textBox1.Text = (string)comboBox1.SelectedItem; } [/code] EDIT: Teraz się kapnąłem, że nie korzystasz z Visual Studio tylko z SharpDevelop...powinno to być podobne ale głowy nie daję ;) Zawsze jest jeszcze Visual Studio Express (jeżeli nie jesteś studentem i nie masz wersji Pro za friko) lub wersja 2010 beta 2.
AndrewSpec
Dodano
23.11.2009 13:58:42
Tak czy owak dzięki śliczne... Mam jeszcze jeden problem, który nie daje mi spać po nocach... Czy zechciałbyś mi pomóc jeszcze raz? Problem dotyczy: CheckedListBox, ListBox oraz ComboBox np. w ComboBox? Wiadomo, to rozwijane okienko z wyborem... W jaki sposób wybrać którąś z kolei opcję na takiej liście i wywołać do niej zdarzenie... Dajmy na to taki proces: Wybieram z ComboBox-a jakąś tam linijkę... po czym klikam przycisk... i zmienia mi się nazwa w TextBox-ie Trochę to zagmatwałem... :mryellow: Ponownie proszę o pomoc...
Cyber Phantom
Dodano
22.11.2009 23:59:30
Okazało się iż faktycznie twój sposób działa doskonale... jednak miałem trochę problemów z zastosowaniem go... Ścieżka dostępu do pliku gdy np. chcę wywołać notatnik Który znajduje się w katalogu c:\Windows\Notepad.exe Kod dla tego wywołania musi wyglądać tak: System.Diagnostics.Process.Start("c:/Windows/Notepad.exe"); Dzięki śliczne za pomoc, byłem bardzo daleki od znalezienia rozwiązania dla tego procesu :)
Cyber Phantom
Dodano
22.11.2009 14:00:01
  • AndrewSpec 22.11.2009 16:36:18

    [quote=Cyber Phantom] System.Diagnostics.Process.Start("c:/Windows/Notepad.exe"); [/quote] chyba: [code] System.Diagnostics.Process.Start("c:\\Windows\\Notepad.exe"); [/code] lub: [code] System.Diagnostics.Process.Start(@"c:\Windows\Notepad.exe"); [/code] ale to tylko tak dla potomności :)

SharpDevelop służy do programowania w C# a nie C++ (chyba że coś się zmieniło...), w każdym razie w C# program odpala się tak: [code]System.Diagnostics.Process.Start("ścieżka_do_pliku");[/code] Jest to najprostszy sposób, który ma kilka wad ale jeżeli chcesz tylko uruchomić dany program to powinno styknąć :)
AndrewSpec
Dodano
21.11.2009 15:27:49
Cyber Phantom
Dodano:
14.11.2009 21:35:58
Komentarzy:
16
Strona 2 / 2