Vypadá to jednoduše a užitečně, Pošli mi prosím více informací mailem.
Příspěvky odeslané z IP adresy 178.72.192.–
Tady je ukázkový příklad:
private void button1_Click(object sender, EventArgs e)
{
TreeNode node1 = treeView1.Nodes.Add("Level 1");
var lNody = new List<TreeNode>();
for (int i = 0; i < 10; i++)
{
TreeNode node2 = node1.Nodes.Add("Level 2");
lNody.Add(node2);
}
foreach (TreeNode tn in lNody)
{
tn.BackColor = Color.Aqua;
}
}
Chtěl jsem na něm ukázat, že se do listu uloží (a tím obarví) pouze poslední node. Bohužel ale příklad funguje a obarví se všechny nody.
Odcházím, abych se nad sebou hluboce zamyslel.
Na formuláři mám komponentu TreeView. Potřebuji projít některé její nody a pokud splňují podmínky, uložit je do listu.
TreeNode node; // Nody, které kontroluji
var lPlatne = new List<TreeNode>(); // List, do kterého ukládám vyhovující nody
lPlatne.Add(node); // Přidám do listu další node
foreach (TreeNode tn in lPlatne) // Na závěr uložené nody obarvím
{
tn.BackColor = Color.Aqua;
}
Problém je v tom, že tímto způsobem se uloží a obarví pouze poslední node. V čem je chyba?
Díky.
#5 m4r10
Vymyslel a naprogramoval jsem svůj algoritmus. Byl funkční, zdálo se, že potřebuje jen trochu doladit. S každým vyřešeným problémem se ale objevil další a nakonec program narostl do takových rozměrů, že výpočet byl nepoužitelně dlouhý (minuty až desítky minut). Proto hledám lepší řešení.
Děkuji, ale o tomto algoritmu vím a nelze ho příliš použít, ani pro inspiraci. Hlavní problém je v tom, že batoh je pouze jeden.
Ještě doplním. Soubory i disky jsou různých velikostí.
Hledám algoritmus (který už pravděpodobně existuje) pro následující problém.
Mám 2 až x disků, na které potřebuji umístit 2 až x souborů. A to tak, aby disky byly co nejlépe využity a zbytek co nejmenší. Soubory nelze dělit.
Poradíte mi, jaký algoritmus použít?
Díky.
Mám 38 let, posledních 10 let pracuji v IT na pozicích správce sítě a SW podpora. Programování mám jako koníčka, okrajově ho využiji i v práci. Rád bych získal referenci jako programátor. Zapojím se proto do zajímavého komerčního projektu jako programátor c#. V této oblasti mám zkušenosti na úrovni středně pokročilý. Malé práce do 100 hodin provedu zdarma, práce nad tento limit za peníze (dohodou). Jde mi pouze o smysluplné komerční projekty, o programování her nemám zájem. Děkuji za nabídky a těším se na spolupráci. nonameov /z/ seznam /t/ cz.
Zjistil jsem, že se prostřednictvím SharpDevelop dostanu ke zdrojovým kódům DLL .netovských aplikací. Překvapilo mě, jak je to jednoduché. Vím, že existují dekompilátoty, ale podle mých zkušenosti vrací špatně čitelný kód. Naproti tomu je kód SD dokonale čitelný, se zachováním jmen proměnných i formátování. Chybí jen komentáře, pokud ovšem ve zdroji vůbec byly.
Má někdo vysvětlení, jak je to možné?
Jde v tomto případě o dekompilaci CIL, nebo se zdrojáky načítají odjinud?
Díky
Zajímal by mě váš názor na toto:
Hledám maximálně jednoduchý způsob, jak odeslat informaci o hmotnosti včelího úlu vzdálenému příjemci.
Váha komunikuje prostřednictvím infra.
Jak reálně vidíte například tuto možnost?
Poblíž váhy mobil (s Androidem?), v mobilu prográmek, který rozkóduje infra a odešle ho jako SMS. Jak složité by bylo toto naprogramovat?
U včel není elektřina, GSM signál je, wifi taky.
Díky
Již podruhé jsem se ve stejném projektu setkal se stejnou situací. Když změním ikonu výsledného exe, tato změna se ve win projeví pouze při zobrazení "malé" ikony. "Velká" ikona zůstává stále stejná a změní se sama po cca měsíci - tedy po více restartech. Vyzkoušeno na dvou PC.
Setkal se s tím někdo?
Hledám co nejjednodušší způsob, jak z programu zajistit prozvonění konkrétního telefonního čísla. Funkce bude součástí programu, který kontroluje větší množství technických zařízení, jejihž součástí je i sim karta. Funkce vrátí hodnotu 1-lze prozvonit, 0-nelze prozvonit. Zařízení je i na GPRS, pokud ale to spadne, zajímá mě, jestli je alespoň na GSM.
Nejlepší, co jsem našel, je použití Skype out. Ptám se proto jestli někdo neví o jednodušším řešení. Nejaký prográmek, brána na netu, databáze operátora :-)
Pokud by zbylo jen skype, lze prozvonění provést v "tichém" režimu, tedy na pozadí?
Pomocí ilMerge jsem sloučil exe a dvě dll do jediné assembly. Exe je moje dílo, dll ne. V logu ilMerge není chyba.
Při pokusu o spuštění výsledné assembly mi JIT vyhodí chybu 5244.
Když jdu do ladění, dostanu chybu:
Could not load type 'System.Runtime.Versioning.TargetFrameworkAttribute' from assembly 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
Může být problém v tom, že cílový framework mého exe a dll jsou různé? Bez sloučení funguje vše normálně.
Nedaří se mi na netu najít mscorlib ve verzi 2.0.0.0 - má někdo link?
#2 liborb
Tímto směrem jsem se vydal také. Pokusil jsem se přečíst tabulku readerem řádek po řádku a přeformátovat ručně. Bohužel ale načtení nebylo možné, stejnou chybu házel reader.
Nakonec jsem našel příčinu. Je jí datetime formát, který jsem vkládal do selectu. DateTimePicker.Value nelze přímo vložit do selectu a předhodit sql serveru, je potřeba hodnotu přeformátovat:
String.Format("{0:s}", dtpDo.Value)
Potřebuji vložit výsledek selectu do DataTable. Činím tak tímto kouskem kódu:
SqlCommand commandGprs = new SqlCommand(GlobalniPromenne.selectGprs, conn);
SqlDataReader readerGprs = commandGprs.ExecuteReader();
DataTable tabulkaGprs = new DataTable();
tabulkaGprs.Load(readerGprs);
Ke své nelibosti ale obdržím hlášku:
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
Problém nejspíše souvisí s uložením datumu v tabulce na serveru. Připojuji se ale k různým serverům a jejich konfiguraci neovlivním.
Setkal se někdo s tímto problémem a poradí mi?
#2 CZechBoY
Jde o exe se dvěma knihovnami (vlastní a cizí), bez instalace. Mým cílem je distribuce pouze jediného souboru. Vlastní knihovnu jsem vložil do exe, bez problému. Nyní se chci podobně zbavit i cizí dll.
Zkusil jsem ilmerge - nevyhodí žádnou chybu, ale exe nelze spustit.
Zkusil jsem vložit dll do resource podle http://jankoweb.tode.cz/…exe-souboru/ . Při spuštění dostanu hlášku:
Could not load file or assembly 'Tarser, Version=2010.11129.0.713, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Systém nemůže nalézt uvedený soubor.
V resource dll vložená je.
Nejjednodušší si mi zdá být, v mém exe určit cestu ke knihovně, která již na cílových počítačích je. Nikde se mi ale nedaří najít postup, jak programu sdělit, kde má knihovnu najít.
Z vlastní assembly potřebuji použít cizí dll, která již na cílových počítačích je (v různých verzích a dvou možných umístěních pro 32 a 64 bit).
Otázka zní, jak mám zajistit použití dll která není ve stejném adresáři, ani podadresářích, jako exe.
Děkuji.
Nezavolal.
Přidal jsem tedy referenci na system.web.dll a namespace System.Web.UI
Nahradil jsem
dgvVlastnostiVozidel.DataMember = "Vozidla";
tímto:
dgvVlastnostiVozidel.DataBind();
Výsledkem je hláška:
Error 1 'System.Windows.Forms.DataGridView' does not contain a definition for 'DataBind' and no extension method 'DataBind' accepting a first argument of type 'System.Windows.Forms.DataGridView' could be found (are you missing a using directive or an assembly reference?)
Ukázku použití DataBind jsem našel na:
http://www.okoun.cz/…ovani_v_c%23?…
--------------------------------------------------------------
Nejjednodussi pomoci DataBind - tady ukazka:
/dgKeywords je id datagridu/
private void LoadData()
{
string tblKey = ConfigurationSettings.AppSettings["tblKeywords"];
string tblPages = ConfigurationSettings.AppSettings["tblPages"];
// --------------
SqlConnection cn = new SqlConnection(ConfigurationSettings.AppSettings["dbConnectString"]);
cn.Open();
SqlCommand cmd = new SqlCommand("select * from " + tblKey + " order by klic", cn);
SqlDataReader sr = cmd.ExecuteReader();
dgKeywords.DataSource = sr;
dgKeywords.DataBind();
cmd.Dispose();
cn.Close();
}
V takovém případě sice nedostanu chybovou hlášku, ale ani nenaplním DataGridView.
Hledám co nejjednodušší cestu, jak zobrazit výsledek selectu v DataGridView.
Používám tento kód:
-------------------
SqlCommand NactiVozidla = new SqlCommand("select * from Vozidla", conn);
conn.Open();
SqlDataReader dr = NactiVozidla.ExecuteReader();
dgvVlastnostiVozidel.DataSource = dr;
dgvVlastnostiVozidel.DataMember = "Vozidla";
-------------------
Dostanu tuto chybovou hlášku na řádku s DataMember:
--------------------
Child list for field Vozidla cannot be created.
--------------------
Poraďte mi prosím, co má být v DataMember, když ne název tabulky.
Děkuji za odpovědi. O víkendu se jim budu věnovat a napíšu.
Aplikace přistupuje do databáze a provádí výpočty v délce od minut do hodin. Během této doby je natolik vytížená, že zamrzne. Potřebuji informovat uživatele o průběhu výpočtů, nejlépe oknem s progressbarem. Jak zařídit, aby se progressbar aktualizoval i přes vytížení procesoru? Předpokládám, že progresbar by měl běžet v jiném vlákně. Jistě jde o běžnou programátorskou konstrukci, poradíte mi?
Naprosto perfektní řešení. Děkuji.
Při psaní do comboboxu potřebuji, aby se pod ním zobrazila nápověda - seznam položek, které vyhovují napsanému. Postupným psaním dalších písmen se tento výběr zužuje. Kliknutím na položku nápovědy lze provést výběr.
Lze to jistě řešit programově, ale nejspíše existuje hotová komponenta. Poradíte mi, jak se jmenuje?
#4 djanosik
Uvedu tedy kousek kódu.
foreach (Data Rcol in Data.x)
{
// delší nepřehledný kus kódu, ve kterém pracuji s daty kolekce
// Po absolvování x cyklů foreach zjišťuji, že se potřebuji vrátit o y pozic zpět a znovu část cyklů zopakovat
// Lze to? Pokud ano, jak?
)
#3 LiborBes
Děkuji za obě odpovědi, můj problém ale neřeší.
Zkusím věc popsat jinak. Mám datagridview s checkboxy. Při každém změně zafajfkování (uživatelem) je potřebuji spočítat a součet vypsat. Součet musí být vypsán ihned po změně, nikoli až po opuštění dgv.
Problém je v tom, že označením/odznačením checkboxu sice vznikne událost, ale není ukončen editační režim daného checkboxu. Nezjistím tedy, v jakém je stavu (fajfka a/n). Zjistím to, až uživatel klikne podruhé na stejný řádek, na jiný řádek, nebo mimo dgv. To je pozdě.
Součet označených checkboxů v datagridu zjišťuji takto:
-------------
private void dgvVozidla_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
int n = 0;
dgvVozidla.Click();
foreach (DataGridViewRow rows in dgvVozidla.Rows)
{
if (Convert.ToBoolean(rows.Cells[0].Value))
{
n++;
}
}
groupBox4.Text = "Vozidla (" + Convert.ToString(n) + ")";
}
-------------------------
Problém je v tom, že událost se nevyvolá při změně checkboxu, ale až opakovaném kliknutí. Otázka zní, kterou událost použít, nebo jak zajistit vyvolání události při změně stavu checkboxu.
Děkuji.
Pokud narazím na dostatečně zajímavý úkol, který zvládnu, nabízím spolupráci na programování. Nejde mi o peníze, ale o zdokonalení v programování a získání referencí. Nejsem student, mám 37 let a naposledy jsem programoval v Delphi před cca 10-ti lety. Od té doby jsem byl zaměstnán v IT na pozicích it správce a sw podpora. Nejde mi o vypracovávání domácích úkolů studentům, výsledek by měl být použitelný v praxi. temp7777zavinaacseznamTeckacz