Francesco Geri

Il blog di Francesco Geri
posts - 94, comments - 165, trackbacks - 2

.Net

.Net Framework
Problema con l’icona della Form MDI child quando è aperta maximized

Se si apre un form MDI child come maximized si ha un problema nella visualizzazione della sua icona. Basta creare un progetto con una Form MDI container (IsMdiContainer=True), mettere un Menustrip ed inserire il seguente codice per l’apertura della form figlia Form2: Private Sub NewToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NewToolStripMenuItem.Click Dim f As New Form2 f.MdiParent = Me f.WindowState = FormWindowState.Maximized ...

posted @ venerdì 26 luglio 2013 14:04 | Feedback (0) | Filed Under [ Tips .Net Visual Studio ]

ASPOSE Libraries for .NET

When you need to process some Office file in your project you can use, for example, the Office automation mechanism. But it need to have Office installed on your machine. Otherwise, for example, you can choose a third part library. I think that you can find many libraries over the web, but, for my purposes, in some of the projects I worked on, I used Aspose libraries (home page http://www.aspose.com/). With those libraries you can easily manipulate Office documents (Word, Excel, PowerPoint, Visio and Project!) without needing to have Office installed on your machine....

posted @ giovedì 28 marzo 2013 17:53 | Feedback (0) | Filed Under [ [OT] Relax .Net Visual Studio ]

Visual Inheritance nei controlli Windows Form

Dovendo fare in una stessa applicazione molte form di dialogo per l’immissione o visualizzazione di informazioni ho pensato di creare una form base (scheletro) che fosse impostata con le caratteristiche comuni (font, colore di sfodo) e con i pulsanti ok, applica, annulla. A questo punto tutte le form di dialogo ereditano da questa (invece che da System.Windows.Form.Form) e così si trovano automaticamente i pulsanti e tutto il resto. Per posizionare i pulsanti ho pensato di usare un TableLayoutPanel in modo che ridimensionando le form ereditate i pulsanti si spostino nel punto giusto. Però mi sono accorto che, in...

posted @ venerdì 8 marzo 2013 10:29 | Feedback (0) | Filed Under [ Tips .Net Visual Studio ]

Eliminazione dello sfarfallio (flickering) delle Finestre figlie di una MDI all’activate

Quando una Form MDI contiene delle form figlie aperte in modalità Maximized si uno sfarfallio al cambio delle finestra attiva. Ciò succede quando si attiva la finestra da codice. Per evitare questo fastidioso comportamento si può come al solito ricorrere alle API Windows. A tal proposito ho preparato un modulo MDIUtil che crea un Extension method per aggiungere alla form MDIParent il metodo MyActivateMdiChild con cui si può richiedere di attivare una form child evitando il flickering. Il codice del modulo è il seguente: Imports System.Collections.Generic ...

posted @ venerdì 1 marzo 2013 18:13 | Feedback (0) | Filed Under [ Tips .Net MDI ]

Rimuovere il bordo interno delle form MDI (sunken)

Una Form MDI di default ha un bordo interno (che credo sia di tipo sunken), ovvero del tipo: Per rimuoverlo si può ricorrere alle API windows. A tal proposito ho preparato un modulo MDIUtil che crea un Extension method per aggiungere alla form MDIParent il metodo SetBevel con cui si può richiedere di mostrare o non mostrare il bordo. Il codice del modulo è il seguente: Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports System.Windows.Forms ...

posted @ venerdì 1 marzo 2013 11:05 | Feedback (0) | Filed Under [ Tips .Net MDI ]

Menu Edit WCF Configuration scomparso da Visual Studio 2008

Mi è capitato esattamente quanto descritto in questo post, ovvero ho aggiunto una service reference ad un progetto (Console), ho fatto tasto destro sul file app.config per richiamare l’editor della configurazione WCF, ma il menu contestuale “Edit WCF Configuration” non era disponibile:   Allora seguendo le indicazioni del post di cui sopra ho fatto click sul menu Tools|WCF Service Configuration Editor, in questo modo ho aperto l’editor, da qui ho aperto il file app.config (File|Open), l’ho chiuso ed il menu è finalmente comparso:  

posted @ venerdì 14 maggio 2010 10:49 | Feedback (5) | Filed Under [ Tips .Net VS2008 WCF ]

Format di un DateTime

Quando si “stampa” una data bisogna fare attenzione al formato che si utilizza. Ad esempio io faccio ampio uso del formato italiano tramite il seguente codice: Dim dateAsString As String = Now.ToString("dd/MM/yyyy") Purtroppo quel codice non fa esattamente quello che mi aspetto. Infatti il carattere / ha un significato, ovvero è il separatore di sistema usato per le date. Ovvero, se nei miei settings regionali di sistema la data è scritta ad esempio così yyyy-MM-dd, allora quel ToString di cui sopra produce dd-MM-yyyy, ovvero mette il giorno,...

posted @ giovedì 22 aprile 2010 11:32 | Feedback (2) | Filed Under [ Tips .Net ]

Avviare un eseguibile a 32bit in una macchina a 64bit

Se abbiamo compilato un eseguibile in modalità Any CPU e lo lanciamo su una macchina a 64bit questo verrà ovviamente eseguito a 64bit. Se però ci servisse poterlo avviare a 32bit possiamo sfruttare il tool CorFlags.exe. Basta avviare il prompt dei comandi di Visual Studio e poi digitare: corflags.exe /32bit+ filename.exe Per ripristinare il comportamento normale: corflags.exe /32bit- filename.exe   [Fonte]

posted @ giovedì 8 aprile 2010 16:40 | Feedback (3) | Filed Under [ Tips .Net ]

x64 o x86?

Piccola e semplice funzione in VB.NET per determinare se la macchina in cui l’applicazione in esecuzione è x86 o x64. 1: Function IsSys64Bit() As Boolean 2: Dim identifier As String = Environment.GetEnvironmentVariable("PROCESSOR_IDENTIFIER") 3: If identifier.IndexOf("i86", StringComparison.InvariantCultureIgnoreCase) Then 4: Return False 5: Else ...

posted @ martedì 23 marzo 2010 11:19 | Feedback (2) | Filed Under [ Tips .Net ]

AcceptButton e Textbox Multiline

Se si ha progetta una Windows Form con pulsante OK e Annulla è sempre bene impostare le proprietà AcceptButton sul pulsante OK e CancelButton sul pulsante Annulla. In questo modo l'utente può premere Invio per l'OK ed Esc per l'annulla. Se però nella Form dovete inserire una TextBox Multiline allora c'è un problema: se la textbox ha il focus e premete invio invece che ottenere una nuova linea nella textbox otterrete il click sul pulsante di OK, ovvero vince l'AcceptButton. Per ottenere il comportamento desiderato, ovvero che se premo Reutn mentre sto digitando nella textbox voglio la nuova linea, mentre se sono sugli...

posted @ lunedì 22 febbraio 2010 12:27 | Feedback (2) | Filed Under [ .Net ]

UpdatePanel e focus delle Textbox

Inserendo una Textbox in un UpdatePanel (AJAX) può succedere (o succede sempre?) che la textbox perda il focus, o non lo possa prendere affatto. Un modo per ovviare alla cosa è di registrare uno script che imposti il focus con un piccolo ritardo rispetto alla load: 1: Dim script As String = "setTimeout(""$('" & MyTextBox.ClientID & "').focus(); "", 100);" 2: ScriptManager.RegisterStartupScript(updSearch, GetType(String), "set_focus_script", script, True)

posted @ venerdì 12 dicembre 2008 16:30 | Feedback (2) | Filed Under [ ASP.NET 2.0 Tips .Net AJAX ]

Come verificare se un punto è visibile nello schermo

Il post mostra un semplice tip per vedere se un punto è visibile nello schermo (anche in presenza di più schermi). La grafica dell'esempio è "mozzafiato":   Il codice è invece il seguente: 1: Public Class Form1 2:  3: Private Sub Button1_Click(ByVal sender As System.Object, _ 4: ...

posted @ giovedì 4 dicembre 2008 02:23 | Feedback (0) | Filed Under [ Tips .Net ]

Mouse Wheel in un Panel con Controlli non Focusable (2)

Riprendo un mio precedente post su come ottenere lo scroll con il mouse wheel su un controllo che non possa avere il focus. La soluzione suggerita aveva dei problemi, ed in particolare non gestiva bene il caso in cui il controllo si trovasse all'interno di una form di tipo mdichild, da cui si poteva aprire una form modale.... Ok, non vado avanti nei particolari, ma dico semplicemente che aveva dei problemi. Per cui qui suggerisco un'altra soluzione, che mi sembra funzionare correttamente e che ho trovato googlando a partire dalla prima.   ...

posted @ venerdì 24 ottobre 2008 03:57 | Feedback (0) | Filed Under [ VS2005 .Net ]

Personalizzare il template dei commenti in Visual Studio (per VB.NET)

Come tutti sanno in Visual Studio 2005 si può creare la documentazione automatica del proprio codice semplicemente scrivendo i commenti con il triplice apice ('''). Di default, se si scrivono i tre apici davanti ad un metodo o a quello che volete, automaticamente Visual Studio completa con qualcosa del tipo: 1: ''' <summary> 2: ''' 3: ''' </summary> 4: ''' <remarks></remarks> Io non faccio molto uso di...

posted @ domenica 19 ottobre 2008 20:04 | Feedback (1) | Filed Under [ VS2005 .Net ]

Errore LoaderLock was detected in Visual Studio 2005

Ho un progetto in Visual Studio 2005 che fa uso di una DLL esterna che, in DEBUG, mi genera il seguente errore:   LoaderLock was detected Message: DLL 'C:\Windows\assembly\GAC\dllEsterna\4.0.22.1__80d669b8b606a2da\dllEsterna.dll' is attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.   L'errore interrompe il debug e mi costringe a fare un po' di click di "OK" o "Continua" prima di poter andare avanti. La cosa non è piacevole e rallenta...

posted @ mercoledì 24 settembre 2008 23:40 | Feedback (0) | Filed Under [ Tips VS2005 .Net ]

Mouse Wheel in un Panel con Controlli non Focusable

Se si ha un pannello con "Autoscroll=True" lo si può sfruttare per fare lo scroll con la rotella del mouse. Tuttavia se il pannello contiene solo controlli non Focusable (...che non possono avere il Focus) allora l'autoscroll al mousewhell non funziona. Per questo segnalo un interessante post in cui si spiega come risolvere il problema.

posted @ domenica 14 settembre 2008 23:20 | Feedback (1) | Filed Under [ .Net ]

Disegnare con GDI+: gestire lo zoom

Riprendo un mio post precedente in cui disegnavo un rettangolo con gli angoli arrotondati per aggiungere un paio di cosette.
....

posted @ giovedì 11 settembre 2008 01:23 | Feedback (2) | Filed Under [ .Net GDI+ ]

Stranezze delle ComboBox: impostare il ToUpper di un suo elemento

Oggi mi sono imbattuto in quella che a me pare una stranezza. Ho una windows form con una ComboBox in stile DropDownList, definita ad esempio nel modo seguente:       1 Me.ComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList     2 Me.ComboBox1.FormattingEnabled = True     3 Me.ComboBox1.Items.AddRange(New Object() {"valore 1", "valore 2", "valore 3"})     4 Me.ComboBox1.Location = New System.Drawing.Point(43, 34)     5 Me.ComboBox1.Name = "ComboBox1"     6 Me.ComboBox1.Size = New System.Drawing.Size(149, 21)     7 Me.ComboBox1.TabIndex = 0   Vorrei modificare...

posted @ domenica 7 settembre 2008 22:48 | Feedback (0) | Filed Under [ Tips .Net ]

Disegnare un rettangolo con angoli arrotondati in VB.NET (GDI+)

Di seguito una funzione che consente di disegnare un rettangolo con angoli arrotondati, sfruttando la GDI+ in VB.NET.       1 ''' <summary>     2 ''' Disegna un rettangolo con i bordi arrotondati     3 ''' </summary>     4 ''' <param name="g">Oggetto Graphics per il disegno</param>     5 ''' <param name="pen">Oggetto <see cref="Pen"></see> con cui     6 ''' disegnare il rettangolo</param>     7 ''' <param name="roundedRectangle">Rettangolo da disegnare</param>     8 ''' <param name="cornerSize">Dimensioni dell'angolo arrotondato</param>     9 Public Shared Sub DrawRoundedRectangle(ByVal g As Graphics, ByVal pen As Pen, _    10 ByVal roundedRectangle As Rectangle, ByVal cornerSize As Size)    11   Dim points(7) As Point    12   Dim rX As Single = roundedRectangle.Location.X    13   Dim rY As Single = roundedRectangle.Location.Y    14   Dim...

posted @ martedì 2 settembre 2008 20:48 | Feedback (7) | Filed Under [ .Net GDI+ ]

La proprietà Attributes di un ListItem viene persa nel postback

Definiamo una pagina aspx con un controllo DropDownList al quale aggiungiamo un dei ListItem da codice. Vogliamo creare i ListItem con un attributo per memorizzare una informazione che ci interessa: ListItem item; item = new ListItem("Valore 1", "V1"); item.Attributes.Add("MyCustomAttribute", "CUSTOM 1"); this.MyDropDownList.Items.Add(item); item = new ListItem("Valore 2", "V2"); item.Attributes.Add("MyCustomAttribute", "CUSTOM 2"); this.MyDropDownList.Items.Add(item); Mettiamo in esecuzione e ci accorgiamo che l'attributo viene perso al primo postback. Sembra si tratti di un...

posted @ lunedì 21 luglio 2008 01:38 | Feedback (52) | Filed Under [ ASP.NET 2.0 Tips .Net ]

Nel meraviglioso mondo di SharePoint!

Problema: Se da codice imposto una proprietà di tipo data+ora di un documento contenuto in una Document Library di SharePoint mi ritrovo un valore diverso da quallo impostato. In particolare ho uno sfasamento di un'ora o due.   Soluzione: Certo, direte voi, devi usare le date in formato UTC. Allora vediamo coda succede in 2 casi, cioè se il file esiste e modifico la sua proprietà, oppure se il file è creato nuovo e la proprietà assegnata all'upload. L'esempio suppone che: ci sia un documento all'url http://myServer/mySite/myDocLib ...

posted @ mercoledì 2 luglio 2008 23:59 | Feedback (4) | Filed Under [ MOSS07 Tips .Net ]

Testo che scompare dalle textbox multilinea in Windows Vista

Ho riscontrato in una mia applicazione uno strano comportamento. Il testo di una textbox multilinea scompariva e riappariva passandogli sopra con il mouse. Oltre ad essere multilinea aveva anche una scrollbar verticale ed era inserita in un controllo SplitContainer che a sua volta era all'interno di una TabPage. Il comportamento si verificava solo con Windows Vista.   Per riprodurre il problema è sufficiente creare una applicazione Windows Forms, mettere un TabControl, dentro ad un suo TabPage mettere uno SplitContainer, dentro ad un pannello dello SplitContainer mettere un Textbox multilinea con Scrollbar verticale. Natuaralmente bisogna essere su...

posted @ martedì 1 luglio 2008 20:08 | Feedback (4) | Filed Under [ Tips VS2005 .Net Vista ]

Open XML Format SDK

Pubblicato l'Open XML Format SDK (April CTP): http://www.microsoft.com/downloads/details.aspx?FamilyId=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&displaylang=en   Mentre la versione online dell'SDK è all'indirizzo: http://msdn2.microsoft.com/en-us/library/bb448854.aspx     Fonte: Erika Ehrli

posted @ giovedì 17 aprile 2008 19:45 | Feedback (0) | Filed Under [ .Net XML MS Office ]

Trasformazione di un file XML in un file HTML tramite un XSLT

La trasformazione via codice di un file XML in HTML tramite file XSLT è molto semplice (cito liberamente da MSDN):   ' Load the style sheet.Dim xslt As New XslCompiledTransform()xslt.Load("output.xsl") ' Execute the transform and output the results to a file.xslt.Transform("books.xml", "books.html")   Il codice riportato lavora su file fisici, messi da qualche parte. Se però non si vuole sfruttare il file system, si può usare una funzione come la seguente, che consente di fare la trasformazione senza aver file fisici in gioco.     Function TransformXML(ByVal xDoc As Xml.XmlDocument, ByVal xsltText As String) As String     ' Carica...

posted @ mercoledì 2 aprile 2008 03:55 | Feedback (1) | Filed Under [ Tips .Net XML ]

Deserializzazione di un oggetto complesso passato come parametro in un WebMethod

Se in un WebMethod si passa come parametro un oggetto complesso si può ottenere un errore del tipo: System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: A circular reference was detected while serializing an object of type MyObjectType. at System.Xml.Serialization.XmlSerializationWriter.Writ

posted @ lunedì 17 marzo 2008 03:40 | Feedback (3) | Filed Under [ Tips .Net XML ]

Componente PageSetupDialog

  Il componente PageSetupDialog ha un baco (noto) per cui se (nel computer) le impostazioni di misura sono quelle metriche i valori dei margini impostati vengono convertiti in pollici, e quindi diminuiti. In pratica, se si esegue la ShowDialog del componente l'utente può imposta il valore 10 per il margine sinistro, preme ok e voi dalla vostra applicazione leggete che ha impostato 3,9! Il problema è descritto nell'articolo: http://support.microsoft.com/?id=814355 Per ovviare a questo inconveniente possiamo modificare la chiamata alla ShowDialog del componente nel modo seguente:       1 Imports System.Drawing.Printing     2      3 Public Class Form1     4      5   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _     6   Handles Button1.Click     7     ' Inizializza la proprietà PageSettings     8    ...

posted @ venerdì 22 febbraio 2008 00:28 | Feedback (1) | Filed Under [ Tips VS2005 .Net ]

Excel VBA e Regional Settings

  Il collega Osvaldo mi ha segnalato oggi che una nostra applicazione che si interfaccia con Excel tramite VBA generava il seguente errore:   System.Runtime.InteropServices.COMException (0x80028018): Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))   Indagando sulla cosa abbiamo visto che l’errore si verifica quando sulla macchina in cui gira l'applicazione c’è office in una lingua (es English) e le regional settings in un’altra (es. italiano).   Per risolvere il problema è sufficiente cambiare le regional settings e metterle nella lingua di excel. Se questa soluzione non ci piace possiamo intervenire sul codice. Se la nostra applicazione l'abbiamo già venduta e non vogliamo rilasciare la patch...

posted @ martedì 19 febbraio 2008 03:46 | Feedback (5) | Filed Under [ Tips .Net MS Office ]

Add-in per VS2005 : Collapse di una qualunque regione di codice

Oggi ho installato un add.in per VS 2005 con cui posso finalmente comprimere il codice come mi pare! Evviva! Questo è il link: http://submain.com/default.aspx?nav=products.smartoutline [...]

posted @ mercoledì 13 febbraio 2008 21:51 | Feedback (8) | Filed Under [ Tips VS2005 .Net ]

Documenti Word: Update del valore di custom properties inserite in Header e Footer

Definendo in un documento Word delle custom properties è poi possibile inserirne i valori nel contenuto del documento. Il seguente codice può essere utilizzato per aggiornare in automatico le custom properties ed il contenuto del documento: [vai al post]

posted @ lunedì 17 dicembre 2007 04:30 | Feedback (1) | Filed Under [ Tips .Net MS Office ]

Da oggi al cinema: "Non Usare KeyUp!" - sottotitolo: oggi ce l'ho con la Microsoft!

Ragazzi, oggi la mia stima nei confronti della Microsoft è un po' calata. Dopo essermi lamentato della prepotenza di outlook, ora mi trovo a dovermi lamentare anche della gestione eventi di VB.NET. Provate a mettere una bella textbox (con nome TextBox1) in un form e scrivere questo codice: 1: Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp 2: If e.KeyCode = Keys.Return Then 3: MessageBox.Show("Premuto invio") 4: ...

posted @ mercoledì 5 dicembre 2007 06:09 | Feedback (4) | Filed Under [ VS2005 .Net ]

VS2005: Come aggiungere reference a DLL che si trovano nella GAC

Oggi avevo bisogno di aggiungere la reference ad una DLL in un progetto VS2005 (VB). La DLL si trovava nella GAC e con mio malcelato stupore non sono riuscito a trovare la DLL fra quelle elencate nella finestra "Add Reference" di Visual Studio. Per cui ho fatto quanto segue: ho estratto la DLL dalla GAC (usando il prompt di DOS... ma si può usare un tool come questo); l'ho copiata nella cartella "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies" Ho riaperto la finestra "Add Reference" e sotto il pannello .NET ho selezionato la mia...

posted @ lunedì 5 novembre 2007 06:50 | Feedback (6) | Filed Under [ Tips VS2005 .Net ]

Validazione di un file XML dallo schema XSD

Liberamente tratto da MSDN riporto il codice per la validazione di un file XML da uno schema XSD. ...qui

posted @ giovedì 25 ottobre 2007 20:50 | Feedback (9) | Filed Under [ Tips .Net XML ]

Backgroundworker con Pausa

Al classico Backgroundworker si può facilmente aggiungere la funzionalità di Pausa. Basta creare una semplice classe custom del tipo seguente: ...vai

posted @ giovedì 25 ottobre 2007 05:15 | Feedback (0) | Filed Under [ Tips .Net ]

Upload di un documento su MOSS07 con proprietà

Il codice seguente esegue l'upload di un documento su MOSS 07. Le parti interessanti del codice proposto sono 2: Il codice imposta anche le proprietà del documento in un'unica operazione, quindi generando un'unica versione del documento (nel caso di versionamento attivato). Da notare che la stessa cosa non era possibile nel modello ad oggetti di SharePoint 2003. I valori delle proprietà sono impostati in base al nome visualizzato della proprietà stessa, per cui il codice si preoccupa di trovare il nome interno e convertirlo nel formato opportuno.   Imports Microsoft.SharePoint   Sub UploadFile()   ' Recupera l'oggetto SPSite  ...

posted @ martedì 23 ottobre 2007 00:11 | Feedback (0) | Filed Under [ MOSS07 Tips .Net ]

Se la build di un progetto funziona in debug e fallisce in Release...

Oggi mi è capitato un problemino con un progetto di un webservice.

Il progetto faceva riferimento ad una dll che stava su un percorso di rete condiviso, all'interno della mia intranet.
Capitava che quando facevo la Build del progetto in modalità Debug tutto funzionava bene, mentre in Release falliva...

posted @ lunedì 2 aprile 2007 18:33 | Feedback (2) | Filed Under [ ASP.NET 2.0 Tips VS2005 .Net ]

SerializationException per Add-IN che usano remoting

Ciao, in questi giorni mi è capitato di imbattermi in un problema relativo ad un add-in scritto per MS Visio.
L'AddIn in questione è client di un server contattato via Remoting.
Client e server si scambiano dati tramite strutture definite in una terza dll.
Il problema è che il client (add-in) riesce a chiamare il server ma la restituzione del risultato fallisce con un errore del tipo:

System.Runtime.Serialization.SerializationException: Unable to find assembly...

posted @ lunedì 26 marzo 2007 15:58 | Feedback (1) | Filed Under [ .Net ]

Powered by:
Powered By Subtext Powered By ASP.NET