Windows Forms
Příspěvky odeslané z IP adresy 89.31.10.–
Ahoj kolegové,
potřebuji v datagridu graficky vyjádřit plusové a minusové hodnoty. Něco jako progress bary se středem a čárou na jednu nebo na druhou stranu. Aby bylo na první pohled jasné, že hodnota v řádku jde do plusu nebo do mínusu a zhruba kolik.
Kterou komponentu použít?
Díky
Prosím o nasměrování k řešení problému.
Potřebuji propojit DataGridView a Chart tak, aby změna v DGV znamenala posun svislé čáry v chartu s křivkou na aktuální pozici.
Stejně tak naopak - kliknutím do grafu se označí jako aktivní aktuální řádek DGV.
Děkuji za pomoc.
Potřebuji dostat DataGridView do obrázku PNG. Na netu jsou popsány postupy, například níže uvedený. Všechny postupy ale uloží pouze na monitoru viditelnou část DGV - já potřebuji dostat do obrázku všechno. Jak na to?
public static void ConvertDG2BMP(DataGridView dg, string sFilePath)
{
dg.Refresh();
dg.Select();
Graphics g = dg.CreateGraphics();
Bitmap ibitMap = new Bitmap(dg.ClientSize.Width, dg.ClientSize.Height, g);
Graphics iBitMap_gr = Graphics.FromImage(ibitMap);
IntPtr iBitMap_hdc = iBitMap_gr.GetHdc();
IntPtr me_hdc = g.GetHdc();
BitBlt(iBitMap_hdc, 0, 0, dg.ClientSize.Width, dg.ClientSize.Height, me_hdc, 0, 0, SRC);
g.ReleaseHdc(me_hdc);
iBitMap_gr.ReleaseHdc(iBitMap_hdc);
if (sFilePath == "")
{
return;
}
ibitMap.Save(sFilePath, ImageFormat.Bmp);
}
Snažím se vytvořit graf z tabulky DataGridView. Na netu jsem nelalezl žádný jednoduchý popis, jak postupovat.
Můžete mi prosím vysvětlit postup na jednoduchém příkladu?
V designeru přidám na formulář SplitContainer. Pomocí User Control vytvořím vlastní komponentu, jejímž základem je ToolStrip. Na ToolStripu je Button.
Programově nahážu do SplitContaineru-Panel1 instance vlastní komponenty mujToolStrip..
Problém je v tom, že potřebuji zajistit, aby po kliknutí na Button v instanci mujToolStrip došlo k přesunutí komponenty mujToolStrip do SplitContainer-Panel2.
Prosím o nasměrování.
Ukrádám http stream do souborů na disk. To funguje. Nerozumím ale tomu, proč se uloží i soubory menší než 2kB. Máte v tom někdo jasno?
if (radioButton2.Checked) // File
{
try
{
using (Stream output = File.OpenWrite(withChildPath + fileToUpload))
using (Stream input = response.GetResponseStream())
{
if (response.ContentLength > 2000) // Prázdné sestavy neukládat
{
input.CopyTo(output);
ZapisDoLogu(fileToUpload + "\tUloženo na disk:\t" + (response.ContentLength/1000).ToString() + " kB");
}
else
{
ZapisDoLogu("*** Prázdná sestava " + fileToUpload + " nebude uložena na disk.");
response.Close();
return;
}
}
}
catch (Exception ex)
{
ZapisDoLogu(fileToUpload + "*** Chyba při ukládání na disk: ");
ZapisDoLogu(ex.Message);
}
}
Vyřešeno:
WebRequest request = WebRequest.Create(http);
WebResponse response = request.GetResponse();
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://"+filename));
reqFTP.Credentials = new NetworkCredential("user", "pw");
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.KeepAlive = false;
reqFTP.UseBinary = true;
reqFTP.UsePassive = true;
reqFTP.EnableSsl = true;
Stream ftpStream = reqFTP.GetRequestStream();
if (ftpStream == null)
return;
using (Stream input = response.GetResponseStream())
{
input.CopyTo(ftpStream);
}
response.Close();
Následujícím kódem uložím výsledek webrequestu do souboru na disk.
void UlozNaFtp(string http, string filename)
{
WebRequest request = WebRequest.Create(http);
WebResponse response = request.GetResponse();
using (Stream output = File.OpenWrite(@"C:\Test\" + filename))
using (Stream input = response.GetResponseStream())
{
input.CopyTo(output);
}
response.Close();
}
Poraďte mi prosím jednoduchý způsob, jak stream nasměrovat na ftp server. Jde o přenesení souboru získaného z http api na ftp server.
Pro konkrétní zakázku je potřeba nastíhat konkrétní délky kabelů, jak jsem popsal výše. Takže nepřicházejí žádné nové kabely a zjednodušení 10x3 metrů také není možné. Stříhají se přesné délky, tedy například 50, 40, 30, 30, 30, 20, 20, 10.
Hledat jsem zkoušel, ale odkaz by taky nebyl k zahození. :-)
Toto byl příklad z praxe. Jak je vidět, délky ústřižků mohou být delší, než součet kabelů na cívkách.
Vy#14 RomanZ
Vyzkoušel jsem přibližně tvůj postup. Vezmu nejmenší cívku a nejdelší kabel, který se na ni vejde. Potom druhý nejdelší ..
A potom totéž s vetší cívkou.
Kabely: 157;223;217;158;65;65;180;210;80;80
Cívky: 501;500;195;140
Výsledky:
Cívka 501: 210,80,158
Cívka 500: 217,223
Cívka 195: 180
Cívka 140: 80
Zbytek: 157,65,65
Pro první naplnění to stačí, teď bude asi třeba zaměnovat postupně obsah jednotlivých cívek se zbytky.
Ve skutečnosti nejde o disky, ty jsem použil jen proto, že jsem předpokládal, že právě s nimi už někdo tento problém řešil. Místo zjednodušení se ale zadání zkomplikovalo. :-)
Jde o stříhání kabelů, které jsou navinuty na kabelových cívkách.
Firma potřebuje nastříhat 2-300 kabelů různých délek. Délky si firma sečte a přesně takovou délku objedná v kabelárně.
Kabelárna dodá kabely o celkové délce, ale navinuté na několika cívkách, které nemusí mít stejný návin. Cívek může být až 30.
Teď už zná firma nejen délky kabelů, které bude stříhat, ale i počet cívek a návin na nich.
S těmito informacemi se pustí do stříhání kabelů z jednotlivých cívek.
Je jasné, že vzniknou zbytky. Ty jsou ale dosti drahé, proto se snažím aby byly co nejmenší.
Když kabel pochybí, sáhne se do zbytků, nebo objedná další cívka (to už ale neřeším).
Zdá se, že jde o "Problém dvou loupežníků". :-)
Předpokládal jsem, že jde o nějaký obecně používaný optimalizační algoritmus. Nějaké nasměrování tedy nemáte?
Stále ale nemám jasno v tom, jestli když změním class z private na public, změní se i dafault modifikátory členů.
Jaký se vlastně smysl modifikátoru p. u třídy, když členové mají modifikátory vlastní?
Našel jsem, co jsem hledal, takže si odpovím sám:
| Default | Permitted declared accessibilities
------------------------------------------------------------------
namespace | public | none (always implicitly public)
enum | public | none (always implicitly public)
interface | public | none
class | private | All¹
struct | private | public, internal, private²
delegate | private | All¹
constructor | protected | All¹
interface member | public | none (always implicitly public)
method | private | All¹
field | private | All¹
user-defined operator| none | public (must be declared public)
¹ All === public, protected, internal, private, protected internal
² structs cannot inherit from structs or classes (although they can, interfaces), hence protected is not a valid modifier
Tak to zkusím jinak:
Když u třídy, nebo člena třídy není uveden modifikátor přístupu, tak jaký tam je?
Jaký vliv má specifikátor přístupu třídy na její členy?
Když bude třída internal znamená to, že všichni její členové budou také internal, pokud neuvedu něco jiného?
Díky.
Bylo by možné uvést příklad dědění a instancování třídy s privátním konstruktorem?
Prosím o vysvětlení rozdílu ve výsledku při použití statické třídy a privátního konstruktoru.
V obou případech není možné použití třídy jako bázové a instancování třídy.
Jaký je v tom tedy rozdíl?
Děkuji.
Mail jsem obdržel, ale odpovědět nelze. Prosím tedy o jinou mailovou adresu.
WE ARE SORRY, THIS MAIL BOX IS NO MORE SERVICED.
PLEASE USE MAIL FORM ON ....
Díky za odpovědi.
Píšu aplikace, které používají knihovny externího dodavatele a ten jejich obsah a funkčnost tají. Dosud jsem postupoval metodou pokus omyl, zkoušel jsem i Reflector a jiné dekompilátory. Příliš mi nepomohly. Proto mě překvapila funkčnost SD. O ochranu mého kódu mi nejde.
Podstrčil jsem pouze velkou ikonu. :-) Mate mě na tom to, že nakonec se systém sám umoudří a po čase novou ikonu zobrazí. Jde o zobrazení ve win - plocha, složky.
Díky, řešení vyzkouším. Doufal jsem, že jsem konečně narazil na něco, na co bych použil regulární výraz. :-)
Prosím o pomoc zkušenější.
Potřebuji regulární výrazy, kterými z následujícího řetězce vytáhnu substringy mezi středníky, včetně prvního, který má před sebou mezeru.
ABCD102 0;1;2;3;#
ABCD102 je řetězec proměnné délky, obsahuje velká písmena a čísla, bez mezer
následuje vždy jedna mezera
dále následují substringy, které potřebuji postupně vytáhnout. Vždy pouze substring, bez mezery nebo středníků. Obsahují písmena, čísla a mezery, ale oddělené jsou vždy středníkem.
Jeden regulární výraz pro každý substring. Důležité je, aby neobsahoval "oddělovací" znaky.
Děkuji.
Při procházení kolekce se potřebuji vrátit o x pozic zpět. Ne postupně, krok po kroku, ale skokem. Jak toho dosáhnout? Děkuji.