Hejka. Stawiam dopiero pierwsze kroki w Visual C# i jak się łatwo można spodziewać trafiłem na problem gdzie oprócz dodawania elementów do formy i zmiany ich parametrów trzeba napisać trochę kodu. Mam dwa projekty, w każdym inna forma. Chciałem jakoś ustawić całość tak, aby wciśnięcie przycisku na pierwszej formie uruchamiało drugą formę. Niestety nie wiem jak to zrobić ale wybrnąłem z tego wpisując w metodzie onClick podpatrzone
System.Diagnostics.Process.Start("form2.exe");
Efekt działania jest taki jak zamierzony ale niezbyt to chyba elegancko.
W każdym razie działa.
Teraz chciałbym aby wciśnięcie innego przycisku wczytywało plik .doc do textBox'a znajdującego się w tej samej formie co ów przycisk. Nie mam jednak zielonego pojęcia jak to zrobić. Podejrzewam tylko, że nie będzie to proste gdyż nie chodzi o standardowe .txt. Z drugiej strony co by trzeba zrobić żeby w tym textBoxie wyświetlał się plik .avi, albo żeby inny przycisk włączał i wyłączał muzykę?
Wiem że tego dużo, ale jakakolwiek pomoc, o ile zrozumiałbym objaśnienia
była by bardzo mile widziana.
Pozdrawiam
Yaro
Co do drugiej formy to:
To w jednym projekcie masz jedna forme np Form1, drugą dodajesz wybierając w "Solution Explorer" prawym klawiszem na nazwie projektu ADD->Add New Item i wybierasz Windows Form i dajesz jej nazwe np. Form2
W klasie formy Form1 dodajesz zmienna
Form2 druga_forma;
druga_forma=new Form();
Pozniej w zdarzeniu onClick
druga_forma.Show();
A do wyświetlania Tekstu bardziej proponowałbym kontrolke RichTextBox
A jeśli chodzi o pliki .avi zapoznaj sie z artykułem Media Player DirectShow na CodeGuru.pl
Próbowałem ale nie całkiem mi to działa.
Tak jak opisałeś w Solution Explorer kliknąłem prawym na tytuł
bierzącego projektu i wybrałem Add> Existing Item (gdyż chciałem
dodać tu drugą formę, która już jest utworzona w innym projekcie.
Zostałem zapytany czy chcę aby ta forma została skopiowana czy
żeby tylko został stworzony do niej link. Wybrałem kopiowanie no i
forma znalazła się w moim projekcie. Potem w klasie pierwszej formy
(tak przynajmniej mi się wydaje) po
public partial class MainForm
{
[STAThread]
public static void Main(string[] args)
{
i dalej
public MainForm()
{
InitializeComponent();
// tu dopisałem
Form Form1;
Form1=new Form();
//Form1 to nazwa tej drugiej formy
// pierwsza nazywa się MainForm
}
} // tu kończy się partial class MainForm
po czym mam
void Button1Click(object sender, System.EventArgs e)
{
Form1.Show();
}
Kompilacja jednak wyświetla błąd, który z pewnością jest dla ciebie oczywisty
bo nawet mi coś świta. Ten błąd to : Projekt.exe has more than one entry point
defined. Czyli jak się domyślam kompilator nie wiem która forma powinna wystartować pierwsza a może chodzi o to że mamy dwie metody Main()? No bo jedna jest w MainForm a druga w Form1...
Pozdrawiam
yAro
public partial class MainForm
{
[STAThread]
public static void Main(string[] args)
{
Application.Run(new MainForm()); //TEGO BRAKUJE
}
private Form Form1; //to ma byc poza konstruktorem
public MainForm()
{
InitializeComponent();
// tu dopisałem
Form1=new Form();
//Form1 to nazwa tej drugiej formy
// pierwsza nazywa się MainForm
}
} // tu kończy się partial class MainForm
po czym mam
void Button1Click(object sender, System.EventArgs e)
{
Form1.Show();
}
teraz powinno działać a jak nie to wrzuc cały kod
Ten sam problem z more then one entry point
To jest kod MainForm.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace Assignment
{
public partial class MainForm
{
[STAThread]
public static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
private Form Form1;
public MainForm()
{
InitializeComponent();
Form1=new Form();
}
void Button14Click(object sender, System.EventArgs e)
{
Form1.Show();
}
void CheckBox1CheckedChanged(object sender, System.EventArgs e)
{
}
}
}
a tu początek kodu Form1:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace GoogleWS
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox txtSearch;
private System.Windows.Forms.Button btnSearch;
private System.Windows.Forms.TextBox txtKey;
private System.Windows.Forms.TextBox txtNum;
private System.Windows.Forms.ComboBox cmbPage;
private System.Windows.Forms.TextBox txtResult;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.CheckBox chkFilter;
private System.Windows.Forms.CheckBox chkSafeSearch;
private System.ComponentModel.Container components = null;
public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
tu jest jeszcze trochę kodu ale to nic co by mogło mieć
wpływ na pojawiający się błąd. Same przyciski i pola tekstowe
i doalej jest
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.BackColor = System.Drawing.Color.NavajoWhite;
this.ClientSize = new System.Drawing.Size(792, 571);
this.Controls.Add(this.chkSafeSearch);
this.Controls.Add(this.chkFilter);
this.Controls.Add(this.label4);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.txtResult);
this.Controls.Add(this.cmbPage);
this.Controls.Add(this.txtNum);
this.Controls.Add(this.txtKey);
this.Controls.Add(this.btnSearch);
this.Controls.Add(this.txtSearch);
this.MaximizeBox = false;
this.Name = "Form1";
this.Text = "Google Web Service";
this.ResumeLayout(false);
this.PerformLayout();
}
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
Nie wiem czy to nie o tą końcówkę chodzi...
Jeszcze co do tematu odnośnie Media Playera na CodeGuru. Ściągnąłem WMP 10 SDK i jest tam faktycznie przykład kodu w C#. Niestety nie kompiluje się u mnie. pojawia się szereg nieml identycznych błędów różniących się tylko inną nazwą między apostrofem
The type or namespace 'AxWMPLib' could not be found (are you missing a using directive or an assembly reference?)(CS0246)
Czyli czegoś tu brakuje.
masz dwie funkcje main o to chodzi kompilatorowi usuń funkcje main dla Form1
i mozesz zmienic dla Form1 przestrzen namespace z GoogleWS na Assignment
a co do Playera z CodeGuru sciagnij sobie całe zródło bo w artykule nie ma wszystkich funkcji pokazanych źródło masz w załącznikach na dole strony :P
Rany z jednego problemu w drugi. Teraz Form1 przeskakuje kompilację ale pojawiają się inne problemy. Form1 używa Web Reference i teraz to nie chce dziłać [rotfl] i tak z deszczu pod rynnę...
Forma1 to forma z http://www.geekpedia.com/tutorial74_Google-Search-using-Web-Service.html
Można się wkurzyć. Nie wiem czy nie za wiele będzie prosić abyś w wolnej chwili rzucił na to okiem.
problem jest z:
Type or namespace 'google' coul not be found
Wielkie dzięki z dotychczasową pomoc.
Otwórz plik Reference.cs i zmien przestrzen nazw namespace na Assignment.google :)
w pliku gdzie jest Form1 tez przestrzen namespace daj Assignment :)
Już prawie jest dobrze :) Aplikacja się kompiluje tylko jest kolejny problem.
Wciśnięcie przycisku Google Search otwiera nową formę prawie tak jak powinno tyle, że całkiem nową pustą formę a nie Form1 odpowiedzialną za wyszukiwanie w google. Czy nie powinno być coś tu dopisane
public MainForm()
{
InitializeComponent();
Form1=new Form( jakieś parametry które by startowały właściwą Form1 ? );
Zrobiłem jeszcze coś takiego:
Po naciśnięciu button1 do RichTextBox w/g twojej porady wczytuje się teraz plik .doc który przekonwertowałem na .rtf. Całość jednak nie do końca odbywa się tak jak bym tego chciał. Muszę ręcznie wybrać ten pli a chciałbym żeby po naciśnięciu przycisku plik od razu ładował się w RichTexBox. Gdzie tu podać ścieżkę?
private void button1_Click(object sender, System.EventArgs e)
{
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
System.IO.StreamReader sr = new
System.IO.StreamReader(openFileDialog1.FileName);
MessageBox.Show(sr.ReadToEnd());
sr.Close();
richTextBox1.LoadFile(openFileDialog1.FileName,
RichTextBoxStreamType.RichText);
}
}
Tak mi świta, że FileDialog1 jest tu zbędne. Coś popróbuję bo zaczyna mi to przypominać Jave z którą miałem trochę do czynienia.
Ma być
Form1=new Form1(); //u ciebie jest new Form() czyli otwierasz pusta forme
// a jak dasz new Form1() to otworzy ci twoja forme Google
Dopisz tylko 1 po Form :)
Dopisanie jedynki nie pomogło. Dalej wyświetla nową pustą formę.
Co do wczytywania pliku dałem
private void button1_Click(object sender, System.EventArgs e)
{
richTextBox1.LoadFile("TUTORIAL1.rtf", RichTextBoxStreamType.RichText);
}
i działa :)
A jestes peny ze masz wczesniej zadeklarowane
Form1 form1; //ty masz chyba Form Form1
//a później
form1=new Form1();
;P
Faktycznie było
public Form Form1;
poprawiłem na Form1 Form1;
ale dalej wyświetla pustą formę;
Czy można to jakoś wyśledzić krok po kroku aby widzieć co się dzieje?
Może wtedy złapałbym co jest nie tak.
A jeszcze apropos media playera w Codeguru, nie jestem pewien czy mówimy o tym samym wątku. Ja znalazłem temat na http://www.codeguru.pl/forum-posts-1498.aspx
ale tam nie ma żadnego linka do kodu na dole strony.
Wiesz wrzuc cały kod mi bedzie łatwiej wychwycic błąd , a jak chcesz sam znaleźć błąd to masz debuger ustaw kursor na konstruktorze i daj Run To Cursor ;)
W końcu znalazłem czemu to nie chodziło.
Kiedy były te problemy z "more than one entry point"
puściłem w komenarz metodę Main() w Form1
i nie tylko.
Teraz znalazłem, że komentarzem objąłem także
public Form1()
{
InitializeComponent();
}
:d ale gafa.
Sorki za zamieszanie.