Programování
Form zaklady
Každá komponenta má název Name , idealně nechat prefix "[nazev prvku]_[jeho učel]"
Visualní controly nemusíme pojmenovavat, jako jsou například labely a nějaký okrasný prvky.
Každá komponenta má vlastní události, který se volají, když vznikně nějaká událost.

Form je parial class, která dědí z form
V .desginer.cs najdeme generovaný kod, který se tvoří, když předáváme prvky na form z nástrojů.
InitializeComponent() inicializuje designer a přidluje prvky na form


Pozor, zapisky zapisuju na windows 11, kde jejich vzhled lehce změnil oproti win10, ignorujte jiný vzhled, funkčnost je naprosto stejná
TextBox
je určen pro práci s textem Důležité vlastnosti:
  • Text - obsah textu vně
  • MaxLength - max delka textu
  • ReadOnly - zda se muže číst
  • UseSystemPasswordChar - každý znak bude *
  • TextAlign - jak se bude řadit
  • PlaceHolder - klasicky placeholder
  • MultiLine - Vice linek
Button
Tlačítko je prostě tlačítko
  • Text - obsah textu vně
Mužeme také zobrazit obrázek jako tlačítko a přitom to bude stále tlačítko.
Listbox
Umožnuje obsahovat prvky jako list, takzvanou kolekci items do které můžeme přidávat hodnoty
Ziskaní vybranné hodnoty, mužeme přes
    
this.listbox.SelectedIndex = vybranný index
this.listbox.Items[index]
//pokud není nic vybranné = -1

this.listbox.SelectedItem = vybranou hodnotu hned
//Pokud není nic vybranné, NULL    


    
Lze přidávat více, než jen string, třeba i nějaký třídy.
    
public class Person{
    public int Id {get;set;}
    public string Name {get;set;}
}

this.listbox.Items.add(new Person(){
    Id = 0,
    Name = "Pepa"
})
    
Na vypsání elementu tak volá vždy metodu .ToString().
Pro změnu musíme overridnout .ToString()
Jeden má .ToString(), druhy ale ne


Data, která dáváme do items lze kombinovat
Lze brat data z datasource jako je například List nebo BindingList
ComboBox
ComboList je podobný jako listbox, ale umožnuje vybrat jen jednu hodnotu
Lze tam i psat, ale to se dá vypnout přes vlastnost DropDownStyle > list
Lze brat data z datasource jako je například List nebo BindingList
Události
Každý control má vlastní události, které se volají, když se něco stane
Pod ikonkou blesku najdeme všechny události
    
this.Button_Preview.click += (s,e) => {
// Sem anonynmní funkci
}

// nebo

this.Button_Preview.click += NaseMetoda;

public void NaseMetoda(object sender, EventArgs e)
{
// sem nasi funkci
}
    
Přes UI, lze nastavit pouze jednu událost, ale v kodu lze přidat více
Práce s více forms
Pro vytvoření druhého formuláře, musíme vytvořit nový objekt Form
Na to abychom zobrazily tento prvek, musíme použít .Show() nebo .ShowDialog()
.Show() .ShowDialog()
  • Umožnuje práci na obou formech
  • Hůře získáváme hodnoty
  • Neumožnuje práci na obou formech
  • Lepe ziskáme hodnoty přes dialog result
Přesouvání informací mezi forms
Máme 2 způsoby, jak to udělat a to je .show a .showDialog . Problém ale nastavá v tom, že ve ShowDialog zastaví kod a vrátí, kde jsme zavolali .show() ovšem to má své výhody a nevýhody

Situace:
Máme 2 formy, jeden hlavní a druhý potvrzovací.
Request form se otevře a pak vyplní udaje v textuboxu v form1
Možnost 1: .showDialog
        

// Request Form

private void button_Cancel_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Abort;
    this.Close();
}

private void button_Send_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.OK;
    this.Close();
}

public string GetText()
{
    return textBox_Input.Text;
}
// * Request Form

// Form1

RequestForm requestForm = new RequestForm();
requestForm.ShowDialog();

if (requestForm.DialogResult == DialogResult.Abort)
{
    textBox_Show.Text = "Cancel";
}
else if (requestForm.DialogResult == DialogResult.OK)
{
    textBox_Show.Text = requestForm.GetText();
}

// *Form1
    
Možnost 2: .show()
V tomhle momentě se spustí další form při běhu, takže není možné počkat na doběhnutí, takže je potřeba přidat metodu na event form closing
Pokud chcem nějakou hodnotu z form1 tak musime tak jednoduše přidat metodu getValue()
        

// Form1
RequestForm requestForm = new RequestForm();
requestForm.Show();

// anonymní funkce
requestForm.FormClosed += (sender, e) => {
    if (requestForm.DialogResult == DialogResult.Abort)
    {
        textBox_Show.Text = "Cancel";
    }
    else if (requestForm.DialogResult == DialogResult.OK)
    {
        textBox_Show.Text = requestForm.GetText();
    }
}

// *Form1

// Request Form
public string GetText()
{
    return textBox_Input.Text;
}
// * Request Form


    
Možnost 3: .show()
Stejný jako možnost 2, ale přidáváme tam methodu oproti anonymní funkci, takže tam máme trošku větší
        

// Form1
RequestForm requestForm = new RequestForm();
requestForm.Show();

// přidání methody k tomu

requestForm.FormClosed += OnFormClosing;

private void OnFormClosing(object sender, EventArgs e)
{
    RequestForm aa = sender as RequestForm;

    if (aa.DialogResult == DialogResult.Abort)
    {
        textBox_Show.Text = "Cancel";
    }
    else if (aa.DialogResult == DialogResult.OK)
    {
        textBox_Show.Text = aa.GetText();
    }
}
// *Form1

// Request Form
//Stejný jako nahoře
// * Request Form