C# Visual - budowa interfejsu

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 ?

0

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

1
            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 ;)

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ć.

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ę

{
    MessageBox.Show(TextBoxNazwa1.Text); 
    MessageBox.Show("wcisnieto button"+.....);
}
  1. Jak wyświetlić coś takiego ?
  for (int i = 1; i <= 4; i++)
            {
                MessageBox.Show(("TextBoxNazwa" + i.ToString()).Text);               
            }
0

Dodajesz do do buttona coś takiego:

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

i w handlerze dodajesz wyświetlenie messageboxa

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

0

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

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:

 b2.Click  += new RoutedEventHandler(Onb2Click);

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

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 

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

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

 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

 for (int i = 1; i <= 4; i++)
            {
                MessageBox.Show(("TextBoxNazwa" + i.ToString()).Text);               
            }
0

Klik

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:

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:

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:

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.

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

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

I nic z tego nie było potrzebne

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

2

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1