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á
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ě
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
Pro změnu musíme overridnout .ToString()
Data, která dáváme do items lze kombinovat
Lze brat data z datasource jako je například List nebo BindingList
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
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
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()
Na to abychom zobrazily tento prvek, musíme použít .Show() nebo .ShowDialog()
.Show() | .ShowDialog() |
|
|
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
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()
Stejný jako možnost 2, ale přidáváme tam methodu oproti anonymní funkci, takže tam máme trošku větší
Situace:
Máme 2 formy, jeden hlavní a druhý potvrzovací.
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