IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Antonín Výtaha:12.3.2018 14:58

Jestli jste se stím někdo setkal, tak bych prosil o vysvětlení, co se s tím kalendářem děje.

Když založím nový projekt winform ve VS, vložím do okna kalendář (monthCalendar) a vložím mu do odkazu při změně datumu toto: "Excel.Application excel = new Excel.Applica­tion();" tak se ten kalendář bude po spuštění, při posunu na další nebo předcházející měsíc, snad do nekonečna sám po měsíci posouvat. Děje se to jenom mě nebo je to nějaká chyba?

Celý kód mám takto: (ano, je to skutečně celé na 18-ti řádcích)

using System.Window­s.Forms;
using Excel = Microsoft.Offi­ce.Interop.Ex­cel;

namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeCom­ponent();
}

private void monthCalendar1_Da­teChanged(object sender, DateRangeEventArgs e)
{
Excel.Application excel = new Excel.Applica­tion();
}
}
}

 
Odpovědět
12.3.2018 14:58
Avatar
Odpovídá na Antonín Výtaha
Marian Benčat:12.3.2018 15:06

Já vidím zatím poblazneneho vývojáře :D

Nahoru Odpovědět
12.3.2018 15:06
Totalitní admini..
Avatar
Antonín Výtaha:12.3.2018 15:23

Já vím, naběhl jsem si na to sám. :-D

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.

 
Nahoru Odpovědět
12.3.2018 15:23
Avatar
Antonín Výtaha:12.3.2018 15:25

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?

 
Nahoru Odpovědět
12.3.2018 15:25
Avatar
Odpovídá na Antonín Výtaha
Michal Štěpánek:12.3.2018 16:22

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.

Nahoru Odpovědět
12.3.2018 16:22
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Marian Benčat:12.3.2018 16:46

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?

Nahoru Odpovědět
12.3.2018 16:46
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Michal Štěpánek:12.3.2018 16:49

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...

Nahoru Odpovědět
12.3.2018 16:49
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
Antonín Výtaha:12.3.2018 17:09

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í). :-D

 
Nahoru Odpovědět
12.3.2018 17:09
Avatar
Antonín Výtaha:12.3.2018 17:11
  • do sešitu - "u" funguje dobře, to mi skutečně vypadlo z ruky... :-)
 
Nahoru Odpovědět
12.3.2018 17:11
Avatar
Antonín Výtaha:12.3.2018 17:24

Tak jsem si k tomu vytvořil ještě počítadlo do labelu; teď je s tím větší sranda. :-D :-D :-D

 
Nahoru Odpovědět
12.3.2018 17:24
Avatar
Odpovídá na Michal Štěpánek
Marian Benčat:12.3.2018 18:23

Sorry, to jsem.psal. jemu, ne tobe

Nahoru Odpovědět
12.3.2018 18:23
Totalitní admini..
Avatar
Odpovídá na Antonín Výtaha
don.jarducius:12.3.2018 21:07

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?

Nahoru Odpovědět
12.3.2018 21:07
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
zitekv
Člen
Avatar
Odpovídá na Antonín Výtaha
zitekv:13.3.2018 0:12

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...

 
Nahoru Odpovědět
13.3.2018 0:12
Avatar
Odpovídá na don.jarducius
Antonín Výtaha:13.3.2018 13:17

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... :-D

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

ToolWindowHos­tedEditor 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. :-)

 
Nahoru Odpovědět
13.3.2018 13:17
Avatar
Odpovídá na Antonín Výtaha
Michal Štěpánek:13.3.2018 14:55

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?

Nahoru Odpovědět
13.3.2018 14:55
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
plelovsky
Člen
Avatar
plelovsky:13.3.2018 15:45

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.

 
Nahoru Odpovědět
13.3.2018 15:45
Avatar
Antonín Výtaha:13.3.2018 16:44

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.BeginIn­voke(new DateRangeEven­tHandler(zmena_da­ta), 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...

 
Nahoru Odpovědět
13.3.2018 16:44
Avatar
Odpovídá na Antonín Výtaha
Michal Štěpánek:14.3.2018 12:02

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?

Nahoru Odpovědět
14.3.2018 12:02
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
plelovsky
Člen
Avatar
plelovsky:14.3.2018 14:45

MonthCalendar skutečně v kombinaci s příkazem Excel.Application excel = new Excel.Applica­tion(); 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;
            }
        }
    }
}
 
Nahoru Odpovědět
14.3.2018 14:45
Avatar
plelovsky
Člen
Avatar
plelovsky:14.3.2018 14:53

Pro to co píšeš že chceš s Excelem dělat ovšem nemusíš vytvářet pokaždé novou Excel.Application. Tu vytvoříš jednou na začátku, otevřeš sešit a při změně datumu stačí nastavit v sešitu požadovaný list.

 
Nahoru Odpovědět
14.3.2018 14:53
Avatar
Antonín Výtaha:18.3.2018 19:56

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. :-D :-D

 
Nahoru Odpovědět
18.3.2018 19:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 21 zpráv z 21.