Ahoj,
mohl by mi prosím někdo na pár řádcích zdrojáku ukázat jak přistupovat k vlastnostem combo boxu v menu?
Díky
Ondra
Fórum › .NET
Combobox v menu
Narazil jsem na další problém. V aplikaci používím dataGridView a v některých sloupcích mám tlačítla a checkboxy. Mohl by mi někdo poradit, jak k nim přistupovat? Jak třeba při stisku tlačítka ve sloupci něco vykonat?
Předem díky
Zdar,
myslím, že není možný přiřadit nějakou událost přímo tlačítku nebo jinýmu objektu, takže si odchyť událost CellContentClick (nebo jinou, která bude vyhovovat) a tam už můžeš jednoduše zjistit v jakém řádku a v jakém sloupci došlo ke kliknutí.
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == e.RowIndex)
{
MessageBox.Show("Došlo ke kliknutí.");
}
}
BTW: Co zrovna tebe přivádí do vod řízeného kódu? ;)
Mohl by si mi ještě prosím Tě poradit, jak přečtu hodnotu checkboxu v dataGridView? Nějak mi to nechce chodit. Prošel jsem už kupu diskusních fór, ale všude jsou viceméně nefunkční nebo žádné odpovědi.
použil jsem toto:
if (((bool)dataGridView1.Rows[radky].Cells["print"].Value == true)) MessageBox.Show("Je tam :-]"); else MessageBox.Show("Neni tam :-{");
První checkbox mi to vyhodnotí dobře, ale hned potom to vyhodí chybu:
Object reference not set to an instance of an object.
Celá funkce:
private void uložitToolStripMenuItem_Click(object sender, EventArgs e)
{
//dataGridView1.Rows.Add("aaa", "fdf", "fsdf", "fdfs");
int sloupce = 0, radky = 0;
using (StreamWriter sw = new StreamWriter("data.csv"))
{
for (radky = 0; radky < dataGridView1.RowCount - 1; radky++)
{
for (sloupce = 0; sloupce < 5; sloupce++)
{
sw.Write(dataGridView1.Rows[radky].Cells[sloupce].Value.ToString());
if (sloupce < 4) sw.Write(";"); else sw.WriteLine("");
}
if (((bool)dataGridView1.Rows[radky].Cells["print"].Value == true)) MessageBox.Show("Je tam :-]"); else MessageBox.Show("Neni tam :-{");
}
}
MessageBox.Show("Uloženo", "Data byla úspěšně uložena", MessageBoxButtons.OK, MessageBoxIcon.Information);
Díky
Zdravím,
nejdřív něco ke kódu.
for (radky = 0; radky < dataGridView1.RowCount - 1; radky++)
{
...
}
Vem si např. situaci, kdy máš 9 řádku - max. index řádku je 8, ale v tomto cyklu se dostaneš jen na index 7. Buď u podmínky použij <= nebo nesnižuj počet řádků. Nemyslíš, že by v tomto případě bylo lepší použít cyklus foreach ... ušetřil by sis trochu kódu a s ohledem na danou situaci by mohl být i vyšší výkon?
if (((bool)dataGridView1.Rows[radky].Cells["print"].Value == true)) MessageBox.Show("Je tam :-]"); else MessageBox.Show("Neni tam :-{");
Doporučuju takovej zápis nepoužívát, protože ztrácí na přehlednosti a při větších úpravách u něj ztratíš zbytečně moc času. Vždycky je lepší použít tento zápis.
if (((bool)dataGridView1.Rows[radky].Cells["print"].Value == true))
{
MessageBox.Show("Je tam :-]");
}
else
{
MessageBox.Show("Neni tam :-{");
}
Zapni si debugger a podívej se, kde přesně ta chyba vzniká (která proměnná/vlastnost vrací null). Pravděpodobně to bude přímo Value a stačí tam přidat další podmínku, ale pro jistotu ..
To DeaLer:
Díky, použil jsem raději foreach. Se zapisem podmínky je mi to jasné (čitelnost), ona tam bude jiná, tohle je jen test.Bohužel se mi ale nedaří zjisti, kde dělám chybu... mohl bych ti poslat celý projet?
To durmitor: Klidně mi to pošli na mail ... v průběhu dneška na to kouknu.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Menu - Název vlevo / Menu vpravo — založil Miner123
ComboBox — založil Jirka Penzes
ComboBox — založil curro70
Combobox — založil berni
Moderátoři diskuze