Diskuze: metoda po vykresení formu

C# .NET .NET (C# a Visual Basic) metoda po vykresení formu American English version English version

Avatar
lopi.trucker
Člen
Avatar
lopi.trucker:

čest kucííí, poradí mi někdo?
chci si udělat nazvěme to instalátor. Můj problém je v tom že mám na formu jen label (tady chci měnit jen nadpisy) a progresBar (tady chci zobrazovat jakože průběh). Vše se bude dít v kódu ten label a progres je tam jen pro dekoraci.
A co vlastně chci:
spustí se program, zobrazí se form na něm label a progresbar, chvíli např. 2 sekundy se nic nestane a pak začne nabíhat progresBar (jakože něco hledá).
A toto je můj problém když to dám do form_load tak se mi ten progres vykreslí už vyplněný, když to dám do události form_show tak se mi zobrazí jen form a potom už vyplněný.
Nemůžu za boha dojít na to jak spustit další metodu až např. po dvou vteřinách po zobrazení formu.:(

 
Odpovědět  -1 1.7.2013 14:48
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Použi Timer a tam event Tick, odpočítej si 2 sekundy a potom incrementuj ProgressBar

 
Nahoru Odpovědět  ±0 1.7.2013 16:15
Avatar
lopi.trucker
Člen
Avatar
Odpovídá na Jan Vargovský
lopi.trucker:

Hm to jsem samozřejmě použil, ale progresBar se inkrementuje, až po průchodu celou metodou tick, mám na mysli graficky. ;(

 
Nahoru Odpovědět 2.7.2013 21:19
Avatar
lopi.trucker
Člen
Avatar
lopi.trucker:

Hm to jsem samozřejmě použil, ale progresBar se inkrementuje, až po průchodu celou metodou tick, mám na mysli graficky. ;(

:O už jsem na to došel musel jsem vykomentovat Application.E­nableVisualSty­les();

 
Nahoru Odpovědět 2.7.2013 21:25
Avatar
lopi.trucker
Člen
Avatar
lopi.trucker:

Chlapi potřeboval bych poradit jak mám toto vyřešit. Ten poťáplí form se mi zobrazí, až i s vykresleným progresbarem. Jak to udělat?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.IO;
using System.Diagnostics;
using System.Threading;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        //Timer timer1 = new Timer();
        bool regKlic = false;


        public Form1()
        {
            InitializeComponent();
            regKlic = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{33A2B31D-875D-463F-BC69-7B7BAB119A84}", true) != null;

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "Vyhledávám předchozí verze programu.";
            prvniProgres();
        }

        private void prvniProgres()
        {
            Thread.Sleep(2000);

            for (int i = 0; i < 5; i++)
            {
                progressBar1.Increment(25);
                Thread.Sleep(2000);
            }
        }
    }
}
 
Nahoru Odpovědět 3.7.2013 9:14
Avatar
Juraj Mlich
Redaktor
Avatar
Juraj Mlich:

Skús v tom cykle zavolať metodu Invalidate. Ale niesom si istý či to bude fungovať.

Nahoru Odpovědět 3.7.2013 9:50
Vždy je lepšie učiť sa z cudzích chýb, než z vlastných chýb.
Avatar
Odpovídá na lopi.trucker
Michal Žůrek (misaz):

Load se volá před vykreslením.

Nahoru Odpovědět 3.7.2013 9:57
Nesnáším {}, proto se jim vyhýbám.
Avatar
lopi.trucker
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
lopi.trucker:

to je mi jasný, že se volá před vykreslením, ale která metoda se volá až po vykreslení? zkoušel jsem i metodu show, ale tam se zase nevykreslil label a progressBar. Tak bych potřeboval poradit jak to zavolat, až po vykreslení formu. Díky za každou radu.

 
Nahoru Odpovědět 3.7.2013 10:30
Avatar
Ľuboš Čurgó
Redaktor
Avatar
Odpovídá na lopi.trucker
Ľuboš Čurgó:

musis to vykreslovanie progres baru hodit na druhe vlakno, vo windows forms mas na to componentu background worker,nebudem pisat ako odtialto to pochopi snad kazdy http://tinyurl.com/d7osmzu

edit: zly link

Editováno 3.7.2013 10:59
 
Nahoru Odpovědět 3.7.2013 10:56
Avatar
Odpovídá na lopi.trucker
Luboš Běhounek (Satik):

Do toho cyklu pridej tenhle prikaz:

Application.DoEvents

Ten zpracovava frontu zprav, kterou ty sice plnis, ale nedas ji nikde prostor ke zpracovani, dokud tva funkce prvniProgres() nedobehne, takze se to pak rovnou zpracuje vse najednou a ty nevidis plynulou zmenu.

A jak pise Michal Žůrek (misaz) - z Load to prehod do Show.

Editováno 3.7.2013 11:23
Nahoru Odpovědět 3.7.2013 11:21
:)
Avatar
lopi.trucker
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
lopi.trucker:

Supeeeeeeeeeeeeeer dííííííííííííky ted to fachci jak ma :D jeste jednou dik dobra vilo :-D

 
Nahoru Odpovědět 3.7.2013 11:58
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 11 zpráv z 11.