.Net
.Net Framework
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
...
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....
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...
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
...
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
...
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:
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,...
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]
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
...
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...
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)
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: ...
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. ...
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...
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...
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.
Riprendo un mio post precedente in cui disegnavo un rettangolo con gli angoli arrotondati per aggiungere un paio di cosette.
....
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...
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...
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...
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 ...
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...
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
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...
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
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 ...
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...
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
[...]
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]
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: ...
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...
Liberamente tratto da MSDN riporto il codice per la validazione di un file XML da uno schema XSD. ...qui
Al classico Backgroundworker si può facilmente aggiungere la funzionalità di Pausa.
Basta creare una semplice classe custom del tipo seguente: ...vai
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
...
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...
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...