C# Visual - budowa interfejsu

C# Visual - budowa interfejsu
P4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Witam.
Jestem osobą początkującą, uczę się dopiero programować w C#. Używam środowiska Microsoft Visual Studio 10.
Chcę stworzyć interfejs do obsługi programu i nie wiem jak to zrobić.
Interfejs ma wyglądać mniej więcej tak:

http://www.fotosik.pl/pokaz_obrazek/a3b217ba548156fe.html
(1 linia została skopiowana w paint 3 razy dlatego nie sugerujcie się nazwami)

Tylko takich wierszy ma być 24 a nie tylko 4. I teraz nie chce mi się umieszczasz na formie tego wszystkiego po 24 razy i to opisywać itd. Czy można to rozwiązać jakoś prościej przy pomocy innych kontrolek, lub (nie wiem) tablic, pętli itd. Proszę o jakieś sugestie, podpowiedzi. Jak to zrobić szybko i prosto ?

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
0

Pętla, tablica obiektów każdego rodzaju, wyliczenie położenia i po sprawie.

Trebuh
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: okolice Łodzi
1
Kopiuj
            Button button = new Button(); //tworzysz przycisk
            button.Location = new Point(x, y); //ustawiasz go na pozycjach x i y od lewego górnego roku 
            button.Size = new Size(75, 25); //ustawiasz jego rozmiar
            button.Text = "nazwa"; //nadajesz nazwę
            this.Controls.Add(button); //"pokazujesz" klawisz na oknie

Więcej na: Klik ;)

P4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Dziękuje za tak szybką odpowiedź. Właśnie o takie coś chodziło. Ale nie mogę sobie jeszcze do końca z tym poradzić.

Kopiuj
for (int i = 1; i <= 4; i++)
            {
                Button button = new Button(); //tworzysz przycisk
                button.Location = new Point(20, 30 * i); //ustawiasz go na pozycjach x i y od lewego górnego roku 
                button.Size = new Size(75, 25); //ustawiasz jego rozmiar
                button.Text = "ButtonNazwa" + i.ToString(); //nadajesz nazwę
                this.Controls.Add(button); //"pokazujesz" klawisz na oknie

                TextBox textbox = new TextBox();
                textbox.Location = new Point(140, 30 * i);
                textbox.Size = new Size(75, 25); 
                textbox.Text = "TextBoxNazwa" + i.ToString(); 
                this.Controls.Add(textbox); 
            }

1 Nie wychodzi mi ustawienie tych budonów.
Jeżeli na nie klikam to się nic nie dzieje. Chcę zrobić tak że jak wcisnę ButtonNazwa1 to wyświetli się

Kopiuj
{
    MessageBox.Show(TextBoxNazwa1.Text); 
    MessageBox.Show("wcisnieto button"+.....);
}
  1. Jak wyświetlić coś takiego ?
Kopiuj
  for (int i = 1; i <= 4; i++)
            {
                MessageBox.Show(("TextBoxNazwa" + i.ToString()).Text);               
            }
dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
0

Dodajesz do do buttona coś takiego:

Kopiuj
button.Click += // wciśnij 2 razy Tab visual powinien podpowiedzieć co dalej wpisać i utworzyć handler

i w handlerze dodajesz wyświetlenie messageboxa

P4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Podświetla, wyszukuje MessageBox, ale niechce działać, nie wiem czemu.

http://www.fotosik.pl/pokaz_obrazek/2688b1f25cbf829b.html

mam tylko błąd
Error 6 Cannot implicitly convert type 'System.Windows.Forms.DialogResult' to 'System.EventHandler' c:\Programowanie\Projekty C#\WindowsFormsApplication2\WindowsFormsApplication2\Form1.cs 26 33

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
0

@dam1an napisał Ci, że masz utworzyć handler i w nim dopiero utworzyć MessageBox.

P4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Jak pisałem wcześniej jestem początkującym. W szkole uczyłem się Turbo Pascala. Zabawę z C# zacząłem niedawno. I nieraz oczywiste sprawy dla was to dla mnie całkowita nowość i totalny kosmos. A tym bardziej takich rzeczy nie mam w książkach i kursach… Więc proszę o troszkę cierpliwości. Nie zawsze też wiem czego mam szukać. Tak samo słówko handler nic mi nie mówi.

A w googlach na hasło „button.Click +=” nie wyskakuje od razu gotowiec. A widząc przykład taki:

Kopiuj
 b2.Click  += new RoutedEventHandler(Onb2Click);

próbowałem to zaadaptować dla moich potrzeb ale nie działało

Kopiuj
button.Click += MessageBox.Show(„test”);
button.Click +=new MessageBox.Show(„test”);

Nie oczekuje też że mi wytłumaczycie wszystko od podstaw, czy zrobicie to za mnie. Ale jestem wdzięczny za te nakierowania, a im bardziej konkretniejsze tym lepiej 

Kopiuj
button.Click += new EventHandler(NazwaFunkcji);
 void NazwaFunkcji(object sender, EventArgs e)
        {        
        }

Znalazłem też sposób na pobranie własnej nazwy:

Kopiuj
 Button button = (Button)sender;
               MessageBox.Show(button.Name);    

Możecie mi jeszcze pomóc z tym:
Jak się odwołać do tych komponentów z takich normalnie utworzonych. Chcę wypisać zawartość z tych teztboxów ale znowu coś pewnie przekombinowane. Bo mam błędy. Nie mogę zamieni tekstu na nazwę textboxa: ("TextBoxNazwa" + i.ToString()).Text

Kopiuj
 for (int i = 1; i <= 4; i++)
            {
                MessageBox.Show(("TextBoxNazwa" + i.ToString()).Text);               
            }
Trebuh
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: okolice Łodzi
0

Klik

Ktos
  • Rejestracja: dni
  • Ostatnio: dni
4

Co do zdarzeń, np. Click, to one oczekują, że przypisze się tzw. delegat, czyli coś w rodzaju zmiennej, która wskazuje na metodę (funkcję). Dodatkowo, ta funkcja musi mieć określone parametry, np. dla Click musi przyjmować dwa, gdzie jeden to sender, a drugi to EventArgs (odpowiedni EventArgs).

Więc coś takiego:

Kopiuj
button.Click += MessageBox.Show(„test”);

Nie jest możliwe z dwóch powodów, bo po pierwsze MessageBox.Show() to już wywołanie metody, a nie sama metoda, po drugie nawet nie jest zgodne z wymaganiami obsługi klikania. Zadziała natomiast coś takiego:

Kopiuj
Button b = new Button();
b.Click += b_Click;

// w klasie, nie w metodzie w której dodajesz przyciski
static void b_Click(object sender, EventArgs e)
{
    MessageBox.Show("test");
}

Alternatywnie, coś takiego:

Kopiuj
b.Click += (se, ev) =>
    {
        MessageBox.Show("test");
    };

Ale tutaj pojawia się trochę magii - tworzę tutaj de facto funkcję bez nazwy (anonimową) w postaci tzw. wyrażenia lambda.


Co do twojego drugiego problemu - musisz szukać kontrolek o określonych nazwach na formie (this.Controls.Find() - http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k%28System.Windows.Forms.Control.ControlCollection.Find%29%3bk%28TargetFrameworkMoniker-.NETFramework%2cVersion%3dv4.5%29%3bk%28DevLang-csharp%29&rd=true) albo zamiast dodawać po prostu kontrolki do formatki dodawać je jeszcze do jakiejś kolekcji lub tablicy i wtedy będziesz miał do nich od razu zapamiętane odwołania.

P4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7
0

Dzięki za odpowiedź „Ktos” twoje przykłady pokazują mi jak mało wiem i że c# nie jest wcale taki prosty i łatwy.
Nie nawiedzę tych stron http://msdn.microsoft.com :/ ten lik co podałeś to mi w niczym nie pomógł. Te strony msdn przeważnie wprowadzają tylko w błąd tą „pomocą” i nic nie mogę z tamtą zaadaptować to swoich potrzeb.
Dzięki wszystkim za pomoc już rozwiązałem wszystkie problemy na razie.
A tak zrobiłem to ostatnie

Kopiuj
 MessageBox.Show(this.Controls["TextBoxNazwa" + i.ToString()].Text); 

I nic z tego nie było potrzebne

Kopiuj
public Control[] Find(
	string key,
	bool searchAllChildren
)

Z linku http://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k%28System.Windows.Forms.Control.ControlCollection.Find%29%3bk%28TargetFrameworkMoniker-.NETFramework%2cVersion%3dv4.5%29%3bk%28DevLang-csharp%29&rd=true

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
2

Tu aż się prosi o zrobienie UserControl i wsadzenie ich w TableLayoutPanel.

BF
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 68
0

Dokładnie tak jak pisze somekind. A nawet jak nie UserControl to wsadzenie ich w TableLayoutPanel, wtedy nie ma problemu że jak program zmaksymalizujesz, to będzie to brzydko wyglądać no i oczywiście nie musisz się bawić w jakieś x i y, po prostu wrzucasz to do odpowiedniej komórki w TableLayoutPanel.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.