Avatar
Antonín Výtaha:12. března 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. března 14:58
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Antonín Výtaha
Marian Benčat:12. března 15:06

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

Nahoru Odpovědět 12. března 15:06
Totalitní admini..
Avatar
Antonín Výtaha:12. března 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. března 15:23
Avatar
Antonín Výtaha:12. března 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. března 15:25
Avatar
Odpovídá na Antonín Výtaha
Michal Štěpánek:12. března 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. března 16:22
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Michal Štěpánek
Marian Benčat:12. března 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. března 16:46
Totalitní admini..
Avatar
Odpovídá na Marian Benčat
Michal Štěpánek:12. března 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. března 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. března 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. března 17:09
Avatar
Antonín Výtaha:12. března 17:11
  • do sešitu - "u" funguje dobře, to mi skutečně vypadlo z ruky... :-)
 
Nahoru Odpovědět 12. března 17:11
Avatar
Antonín Výtaha:12. března 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. března 17:24
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na Michal Štěpánek
Marian Benčat:12. března 18:23

Sorry, to jsem.psal. jemu, ne tobe

Nahoru Odpovědět 12. března 18:23
Totalitní admini..
Avatar
Odpovídá na Antonín Výtaha
don.jarducius:12. března 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. března 21:07
Avatar
zitekv
Člen
Avatar
Odpovídá na Antonín Výtaha
zitekv:13. března 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. března 0:12
Avatar
Odpovídá na don.jarducius
Antonín Výtaha:13. března 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. března 13:17
Avatar
Odpovídá na Antonín Výtaha
Michal Štěpánek:13. března 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. března 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. března 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. března 15:45
Avatar
Antonín Výtaha:13. března 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. března 16:44
Avatar
Odpovídá na Antonín Výtaha
Michal Štěpánek:14. března 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. března 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. března 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  +1 14. března 14:45
Avatar
plelovsky
Člen
Avatar
plelovsky:14. března 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. března 14:53
Avatar
Antonín Výtaha:18. března 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. března 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.