Nuova grafica

Forum dedicato ai programmatori di X# in lingua italiana – Italian language forum

Moderator: wriedmann

User avatar
softdevo@tiscali.it
Posts: 191
Joined: Wed Sep 30, 2015 1:30 pm

Nuova grafica

Post by softdevo@tiscali.it »

Io sto completamente ridisegnando la grafica delle mie applicazioni Windows Form.
In allegato un esempio.
Le finestre sono CLASS DevoWindow INHERIT Form.
Le finestre sono senza bordo e la TextBar è sostituita da una Label chiamata Caption.
Come posso scrivere questo codice senza che si generi errore?

PROPERTY Text AS STRING
GET
RETURN SELF:Caption:Text
END GET
SET
SELF:Caption:Text := VALUE
END SET
END PROPERTY

Grazie
Attachments
Immagine.jpg
Immagine.jpg (16.38 KiB) Viewed 774 times
User avatar
wriedmann
Posts: 3765
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Nuova grafica

Post by wriedmann »

Ciao Danilo,
vuoi dire che la Label che si chiama "Caption" nella classe DevoWindow non esiste?
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
wriedmann
Posts: 3765
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Nuova grafica

Post by wriedmann »

Ciao Danilo,
questo codice da me compila:

Code: Select all

class DevoWindow inherit Form
	protect Caption as Label

property Text as string
get
return self:Caption:Text
end get
set
self:Caption:Text := VALUE
end set
end property

end class
In teoria puoi accorciare e scrivere la property in una riga (secondo me anche più elegante):

Code: Select all

property Text as string get self:Caption:Text set self:Caption:Text := VALUE
Saluti

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
softdevo@tiscali.it
Posts: 191
Joined: Wed Sep 30, 2015 1:30 pm

Nuova grafica

Post by softdevo@tiscali.it »

Si Wolfgang grazie, anche a me compila, ma poi, agganciato ad una qualsiasi applicazione in esecuzione da questo errore:
In questo caso la finestra WLoginEnglish eredita dalla DevoWindow.
Se tolgo la property tutto torna a funzionare.

System.NullReferenceException
Riferimento a un oggetto non impostato su un'istanza di oggetto.

Callstack :
WLoginEnglish.System.Void WLoginEnglish..ctor()() : C:XIDEProjectsDll_and_SystemFilesApplicationsSQLManagerNetPrgWLoginEx.prg : 8
static System.Void SQLManagerNet.Exe.Functions.Start(System.String[] pString)() : C:XIDEProjectsDll_and_SystemFilesApplicationsSQLManagerNetPrgMain.prg : 31
User avatar
wriedmann
Posts: 3765
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Nuova grafica

Post by wriedmann »

Ciao Danilo,
probabilemente la tua property viene chiamata prima che il label "Caption" è stato creato.
In questo caso scriverei questo codice:

Code: Select all

property Text as string
get
 if self:Caption == null
  return ""
 else
  return self:Caption:Text
  endif
end get
set
 if self:Caption != null
  self:Caption:Text := VALUE
 endif
end set
end property
Dovrebbe esistere una possibilità ancora più corta, ma devo controllare.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
softdevo@tiscali.it
Posts: 191
Joined: Wed Sep 30, 2015 1:30 pm

Nuova grafica

Post by softdevo@tiscali.it »

NO niente anche così non cambia, sembra che richiamare una istanza della form, Self:Text appunto, essendo la finestra senza bordi crei il problema. Si dovrebbe secondo me poter scrivere un qualcosa del tipo : Override Property Text as string

Danilo
User avatar
wriedmann
Posts: 3765
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Nuova grafica

Post by wriedmann »

Ciao Danilo,
ok, capito,
In effetti la classe System.Windows.Forms.Form ha già un property che si chiama "Text":
https://docs.microsoft.com/en-us/dotnet ... .form.text
In questo caso in effetti devi aggiungere la keyword "ovveride" davanti per dire che vuoi sovvrascrivere la property della classe parente.
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
softdevo@tiscali.it
Posts: 191
Joined: Wed Sep 30, 2015 1:30 pm

Nuova grafica

Post by softdevo@tiscali.it »

Ciao Wolfgang, mettendo OVERRIDE l'errore non viene generato e l'applicazione parte, ma l'assegnazione non funziona,
credo che dovrò scrivere SELF:Caption:Text := "bla bla bla" per forza.

Danilo
User avatar
Chris
Posts: 4936
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

Nuova grafica

Post by Chris »

Hi Danilo,

What is SELF:Caption? Is it an object? Are you sure this is initialized? The error message seems to say that this is NULL.
Maybe you can produce a small sample and post it here to have a look?

.
Chris Pyrgas

XSharp Development Team
chris(at)xsharp.eu
User avatar
wriedmann
Posts: 3765
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Nuova grafica

Post by wriedmann »

Ciao Danilo,
potresti darci un piccolo esempio che dimostra il problema?
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Post Reply