vykreslování   zodpovězená otázka

VB.NET, WinForms

Dobrý den,

Při použití

Dim g As System.Drawing.Graphics

pro celou třídu a poté

g.DrawImage(ImageList1.Images.Item(x)

v cyklu ve vlastní funkci by mi program měl vykreslit obrázky po celém formu. Místo toho mi ale vykreslí obrázky jen do obdélníku cca 284x268, dál ponechá form takový, jaký byl předtím. Neví někdo, kde dělám chybu?

Viz http://mario-hacker.borec.cz/graphics.jp...

Děkuji za případné odpovědi

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ten obdelník se mi zdá podobný jako defaultní vnitřní obdélník při vytvoření nového Formu, jehož standardní velikost je [300;300]. Tak mě napadá, jestli náhodou ten Form potom někde dále nedimenzujete, protože, pak by bylo třeba překreslit znovu ten Form.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V jednom programu používám me.setclientsizecore(320,320), ale mám ještě jiný program, který se chová stejně bez použití této funkce.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Záleží na tom, v jaké události to vykreslujete. Pro správné chování je potřeba render v události Paint. Vy renderujete řekl bych v události Load? Každopádně po změně velikosti Formu stačí překreslit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

me.setclient... používám ve form1_load, samotné g.drawimage ve vlastní funkci, kterou volám ve form1_paint a mouseclick,tam se objevuje stejná chyba...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobře, dejte volání na tu funkci, která render provádí za Me.SetClientSizeCore. Pak mě ještě napadá: renderujete přímo na formulář, nebo do bitmapy, kterou potom na formulář vykreslíte? Má ta bitmapa, jestli nějaká je, správné rozměry? Případně, jestli používáte PictureBox, taktéž zkontrolujte rozměry.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobře, dejte volání na tu funkci, která render provádí za Me.SetClientSizeCore. - tak to mám.

Renderuju přímo do formuláře...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A nastala změna? Zkuste ještě ošetřovat událost SizeChanged.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste ještě ošetřovat událost SizeChanged Jak to přesně máte na mysli? Jsem stále ještě začátečník.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vytvořte handler události SizeChanged a dejte do něj také volání na render:

Private Sub Form1_SizeChanged() Handles Me.SizeChanged
    MojeProcedureKteraPrekresluje()
End Sub

Například.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

tohle mi nahlásí error System.NullReferenceException: Odkaz na objekt není nastaven na instanci objektu.

v Mines.Form1.vykresleni() v C:\Users\Dksjf\Documents\Visual Studio 2005\Projects\Mines\Mines\Form1.vb:řádek 21

v Mines.Form1.Form1_SizeChanged(Object sender, EventArgs e) v C:\Users\Dksjf\Documents\Visual Studio 2005\Projects\Mines\Mines\Form1.vb:řádek 67, přičemž na řádku 21 je g.drawimage... ve vykreslovací proceduře, řádek 67 je volání této procedury v sizechanged

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Asi se událost vyvolá při vytvoření formuláře, když g ještě nemá žádnou hodnotu. Dejte podmínku pro ošetření:

If g IsNot Nothing Then ...
nahlásit spamnahlásit spam 0 odpovědětodpovědět

www.mario-hacker.borec.cz/mines.zip

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nejprve nastavíte velikost pro vykreslování: g = Me.CreateGraphics v okně velikosti 300x300 a pak okno zvětšíte - g zůstane. Obraťte pořadí.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky moc

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omlouvám se za to, že jsem nereagoval, Váš mail mi spadl do SPAMu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback