Diskuze: Poblázněný kalendář
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 21 zpráv z 21.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Já vím, naběhl jsem si na to sám.
Ono to takhle vypadá debilně, ale jelikož mi to začalo blbnout v
důmyslnější aplikaci, tak jsem to ořezal na prvočinitele a zlobí to i
tak. Jen jsem chtěl vědět,
co to způsobuje.
Apropo: při psaní sem do fóra to tady v okně při psaní vynechává schválně písmeno "h" všem nebo mám jen zkrátka dnes blbej den?
Písmeno "h" ti vynechává, páč máš asi blbou klávesnici. Můžeš nám
trošku popsat, co by měl tvůj program vlastně dělat?
Z toho tvého kódu bych řekl, ža každá změna datumu vytvoří novou
instanci Excelu.
Takže tu tvrdís, ze když tu řádku s vytvořením nové instance Excelu smazes, tak se to přestane měnit jo?
Já nic takového netvrdím, ty něco takového někde vidíš? Já se ho jen ptal, co má jeho program dělat, abych pochopil, proč tam je to vytváření instance...
Tak co se týče písmena "h", tak to klávesnicí není, protože při
odeslání příspěvku se to normálně zobrazí, jen to není zde při psaní.
Dokonce když budu h držet, tak mi nevznikne dlouhá čára písmenek, ale
udělá to takovou pravidelnou salvu jako z kulometu. A navíc to místo h
udělá mezeru, tak nevidím problém v klávesnici.;-)
Ale abych se vrátil k tématu; tento problém vznikl tak, že při změně
kalndářního měsíce šáhnu přes Excel do sešit a vyčtu si tam data z
listu v daném měsíci. To všechno funguje perfektně, když si pro data
šáhnu přes tlačítko. Jenže když to zautomatizuji, aby se to zrovna
načetlo při změně v kalendáři, tak se kalendář zasekne a posouvá se o
měsíc furt dokolečka a tak tak že jde vůbec stihnout ho zavřít přes
křížek. Sem jsem to dal osekané na úplný základ proto, aby mi někdo
dokázal vysvětlit, co v tom kódu způsobí posouvání toho kalendáře. Tomu
opravdu nerozumím. A pochybuji, že mám v tom mém stoletém computeru
nějakou Viki (kdo viděl "Já, robot" pochopí).
Tak jsem si k tomu vytvořil ještě počítadlo do labelu; teď je s tím
větší sranda.
Zkusil jsem tvůj převratný kód a nic z toho co jsi psal se neděje. Jakou verzi .Net máš jako target? Verze Office.Interop a verze excelu?
Nemůže být problém tím, že při změně data se změní datum, což vyvolá změnu data a tak pořád dokola? Jen hádám...
Je zajímavé, že po vyzkoušení zdebagovaného programu se to chová
stejně i na jiném počítači. Jestli se tady na žádné řešení nepřijde,
tak mi to nevadí. Jen bych chtěl zkrátka upozornit na tuhle anomálii, aby se
tomu případně někdo další mohl vyhnout a netrápil se s tím, až by se mu
to také stalo. Kdyby byl problém jen u mě v bedně, tak by to bylo ještě v
poho, tu můžu kdykoliv sešrotovat...
A Zitku hádáš dobře, ale je divné, že se to bez té instance nestane, ať už je místo ní kód jaký chce (z toho co jsem zkoušel).
A pro šťoury a dona Jarduciuse vypadá výpis instaloveného takhle:
Microsoft Visual Studio Community 2017
Verze 15.5.6
VisualStudio.15.Release/15.5.6+27130.2027
Microsoft .NET Framework
Verze 4.6.01055
Nainstalovaná verze: Community
Visual Basic 2017 00369-60000-00001-AA804
Microsoft Visual Basic 2017
Visual C# 2017 00369-60000-00001-AA804
Microsoft Visual C# 2017
ASP.NET and Web Tools 2017 15.0.31127.0
ASP.NET and Web Tools 2017
ASP.NET Core Razor Language Services 1.0
Provides languages services for ASP.NET Core Razor.
ASP.NET Web Frameworks and Tools 2017 5.2.51007.0
Další informace najdete na webu https://www.asp.net/.
Azure App Service Tools v3.0.0 15.0.31106.0
Azure App Service Tools v3.0.0
Azure Data Lake Node 1.0
This package contains the Data Lake integration nodes for Server Explorer.
Azure Data Lake Tools for Visual Studio 2.2.9000.1
Microsoft Azure Data Lake Tools for Visual Studio
Azure Data Lake Tools for Visual Studio 2.2.9000.1
Microsoft Azure Data Lake Tools for Visual Studio
Balíček hostitele adaptéru ladění pro Visual Studio Code 1.0
Rozložení zprostředkovatele komunikace pro hostující adaptéry ladění pro
Visual Studio Code v sadě Visual Studio
Common Azure Tools 1.10
Poskytuje běžné služby, které se dají použít v Azure Mobile Services a
Nástrojích Microsoft Azure.
Microsoft Azure HDInsight Azure Node 2.2.9000.1
HDInsight Node under Azure Node
Microsoft Azure Hive Query Language Service 2.2.9000.1
Language service for Hive query
Microsoft Azure Stream Analytics Language Service 2.2.9000.1
Language service for Azure Stream Analytics
Microsoft Azure Stream Analytics Node 1.0
Azure Stream Analytics Node under Azure Node
Nástroje Microsoft Azure 2.9
Nástroje Microsoft Azure pro Microsoft Visual Studio 2017 – v2.9.51120.3
Nástroje Microsoftu pro průběžné doručování pro Visual Studio 0.3
Zjednodušení konfigurace průběžné integrace sestavení a průběžného
doručování sestavení z integrovaného vývojového prostředí (IDE) sady
Visual Studio
Nástroje TypeScript 15.5.11025.1
Nástroje TypeScript pro Microsoft Visual Studio
Office Developer Tools for Visual Studio 2017 ENU 15.0.27005.00
Microsoft Office Developer Tools for Visual Studio 2017 ENU
OpenCV Manager 0.9.3
OpenCV libraries manager for Visual Studio 2017
Služba jazyka JavaScript 2.0
Služba jazyka JavaScript
Správce balíčků NuGet 4.5.0
Správce balíčků NuGet v sadě Visual Studio. Další informace o systému
NuGet najdete na webu http://docs.nuget.org/.
SQL Server Data Tools 15.1.61710.120
Microsoft SQL Server Data Tools
ToolWindowHostedEditor 1.0
Hosting json editor into a tool window
Workflow Manager Tools 1.0 1.0
This package contains the necessary Visual Studio integration components for
Workflow Manager.
a interop je ve verzi 15.0.0.0 - ufff, to byla dřina.
Je celkem logické, že se program bude chovat stejně i na jiném počítači, protože ten problém je vytvořen do "toho" programu a ne do PC.
...ale je divné, že se to bez té instance nestane...
Pochopil jsem to správně, že když zrušíš to vytváření nové
instance excelu, tak se to takhle blbě nechová?
Proč vůbec tu instanci nově vytváříš při každé změně datumu?
Koukni sem: https://stackoverflow.com/…onthcalendar
Mělo by pomoct dát práci s Excelem do samostatné metody a tu volat z event
handleru přes BeginInvoke.
Kluci, děkuji za rady, ale stále se to nedaří. V apce si to už řeším
jinak, ale rád bych tuto "záhadu" dotáhl už do konce, protože je mi jasné,
že to nakonec bude úplná blbina.
Zkusil jsem to hodit do samostatné metody a volat ji při změně kalendáře -
blblo to; tak jsem tu metodu volal tedy přes beginInvoke
"this.BeginInvoke(new DateRangeEventHandler(zmena_data), sender, e);" -
chovalo se to stejně. Zkusil jsem i podle Michala vytvářet instanci jinde,
hodil jsem to do globalu a dělalo to taky. Bude to určitě souviset s tím,
jak píší na stackoverflowu, že se to spustí při změně datumu když je
změna true i false, jen mě prosím nepranýřujte za to, že nevím jak se na
to dotazovat... Onehdá jsem takhle řešil vyhodnocení radiobuttonu, tam se mi
to také vždy spouštělo při změně dvakrát, ale tam se to dalo ošetřit
zjištěním stavu. Tady nevím, jak z toho utéct...
Možná, kdybys dal víc informací... Když zrušíš veškerý kód uvnitř té metody
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
}
a dáš tam jen třeba
MessageBox.Show("Test");
tak se to chová jak?
MonthCalendar skutečně v kombinaci s příkazem Excel.Application excel =
new Excel.Application(); začne vyhazovat event DateChanged stále dokola.
Např. s MessgeBox.Show() to nedělá.
Ŕešení je popsané také v https://stackoverflow.com/…onthcalendar
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
namespace AntoninVytaha
{
public partial class Form1 : Form
{
private bool dateChanged = false;
public Form1()
{
InitializeComponent();
}
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
dateChanged = true;
}
private void monthCalendar1_KeyUp(object sender, KeyEventArgs e)
{
DoWork();
}
private void monthCalendar1_MouseUp(object sender, MouseEventArgs e)
{
DoWork();
}
private void DoWork()
{
if (dateChanged)
{
Excel.Application excel = new Excel.Application();
dateChanged = false;
}
}
}
}
Omlouvám se za víkendovou výluku, ale už se tomu opět věnuji. Kolegovi
Plelovskému děkuji za nápad s řešením; s tím boolem to takto funguje
opravdu už normálně. Jinak mě to překvapivě zlobilo i s tou variantou, kdy
jsem excel spouštěl dříve. Prostě když tam byl kdekoliv vytvořený, tak
to ten kalendář nerozdejchal. Jo a taky mi to fungovalo dobře s použitím časovače na interval
250 a vyšší - při menší hodnotě už to zase zlobilo. Ale tuhle
vychytávku jsem zkusil jen pro zábavu, jinak by to byla šílená ostuda to
takto řešit.
Zobrazeno 21 zpráv z 21.