SetFocus su TextBox quando il Form non è Modal

Mi è capitato di tribolare per impostare il focus su un form quando lo visualizzo con:

MyForm.show 0

Per risolvere il problema bisogna catturare l’evento “Activate”; ad esempio:

Private Sub UserForm_Activate()
    ' Configura il focus al TextBox_Input.
    With TextBox_Input
        .SetFocus
        .SelStart = 0
        .SelLength = Len(.Text)
    End With
End Sub

Un Batch per archiviare una cartella tramite 7z usando Invia A di Windows

Creare un bat per Windows che utilizza 7z per archiviare una cartella selezionata in Esplora File ed inviata tramite “invia a” del menu contestuale.

Forse servirà solo a me ma – spesso – mi trovo ad archiviare una cartella, prima di modificarla, per averne una copia di backup.

Però mi piace che il backup abbia un “codice di versione”, ovvero: se archivio la cartella “pippo” voglio che l’archivio si chiami “pippo_2024-11-02_2034.7z” dove, tutto quello che viene dopo “pippo”, è un codice progressivo che identifica data e ora di creazione del backup, così che siano sequenziali, in ordine.

Per farlo, procedere come segue:

1] Aprire la cartella del “Invia a:” di Windows; usare win+r e digitare:

shell:sendto

2] Nella cartella che si apre, creare un file di testo e rinominarlo come:

ARCHIVIA_CARTELLA.bat

3] Aprire in modifica il file di cui sopra ed incollare il seguente codice:

@echo off
setlocal enabledelayedexpansion

:: ******************************************************************
:: Script per creare l'archivio della cartella passato come parametro, usando
:: 7z ed associando un codice progressivo automaticamente.
::
:: Versione 202-11-02
:: budus@hotmail.it
:: ******************************************************************

set percorso7z=
set archive_code=
set archive_name=

:: Immagazzina la data e ora corrente.
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do (
	set anno=%%c
	set mese=%%b
	set giorno=%%a
)

for /f "tokens=1-2 delims=: " %%a in ('time /t') do (
	set ora=%%a
	set minuti=%%b
)

set archive_code=!anno!-!mese:~0,2!-!giorno:~0,2!_!ora:~0,2!!minuti:~0,2!

:: Verifica che il parametro sia una cartella e che esista.
if exist "%~1" (
	if not exist "%~1\*.*" (
		echo [I] Il percorso
		echo     "%~1"
		echo     e' una cartella vuota.
	) else (
		if exist "%~1\*" (
			echo [I] Il percorso
			echo     "%~1"
			echo     e' una cartella.
		) else (
			echo [I] Il parametro
			echo     "%~1"
			echo     risulta essere un file.
			goto end_with_error
		)
	)
) else (
	echo [I] Il parametro
	echo     "%~1"
	echo     non risulta essere una cartella.

	goto end_with_error
)

:: Estrapola il nome della cartella da archiviare.
for /f "delims=" %%a in ("%~1") do (
	set archive_name=%%~nxa
)

echo [I] Archiviazione della cartella:
echo     %1
echo     con il codice: %archive_code%
echo     nell'archivio: %archive_name%

for /f "delims=" %%a in ('where /R "%ProgramFiles%" 7z.exe') do (
	if not defined percorso7z set percorso7z=%%a
	goto end
)

:end
:: Se non è stato trovato 7z, emette errore.
if not defined percorso7z goto error__no7z

:: Esegue l'archiviazione usando 7z.
"%percorso7z%" a -bd -- "%archive_name%_%archive_code%" "%~1"
timeout 3
exit /B %errorlevel%


:error__no7z
echo [E] 7z non e' stato trovato in:
echo     %ProgramFiles%

:end_with_error
@pause
exit /B 1

4] Chiudere e salvare il file bat.

Ora è sufficiente usare il menu contestuale di Esplora File di Windows (per Windows 11 si rende necessario aprire le opzioni aggiuntive, cosa fattibile se si tiene premuto il tasto Maiuscola/Shift), quindi, “Invia a” e “ARCHIVIA_CARTELLA.bat”.

Nel bat ho messo diversi commenti, dovrebbe essere chiaro (sì, fino ad un certo punto, me ne rendo conto …) cosa fa ogni pezzo di codice. Se proprio siete curiosi di approfondire, potete chiedermelo o usare qualsiasi AI ed incollare la porzione di codice che vi lascia perplessi, se non l’intero script.

Nel caso in cui preferiate eliminare la cartella dopo l’archiviazione, potente modificare la riga:

"%percorso7z%" a -bd -- "%archive_name%_%archive_code%" "%~1"

in:

"%percorso7z%" a -bd -sdel -- "%archive_name%_%archive_code%" "%~1"

CS0246 The type or namespace name ‘ISldWorks’ could not be found (are you missing a using directive or an assembly reference?)

Non scegliere le Dipendenze dall’elenco, prendi direttamente le DLL.

Dovendo creare app (e anche Add-in) per SolidWorks, in Visual Studio potrebbe capitarvi l’errore nel titolo.

Come ho risolto ?

Leggi tutto “CS0246 The type or namespace name ‘ISldWorks’ could not be found (are you missing a using directive or an assembly reference?)”

C# + WinUI + WinTS (Template Studio): INavigationService

Ho già trattato di WinUI 3 in un altro articolo (C# + WinUI 3 + MVVM Toolkit (Enter like Tab Key to Move Focus on Next Element)), qui mi soffermo sull’uso di Template Studio e alla possibilità di navigare tra le pagine, un po’ come fosse un sito web.

Leggi tutto “C# + WinUI + WinTS (Template Studio): INavigationService”

SOLIDWORKS API SDK: Visual Studio non mostra il Template

Dovendo realizzare un Add-in per SolidWorks mi sono scontrato con questa problematica: installando il SOLIDWORKS API SDK in Visual Studio Community 2019, non mi trovavo il relativo Template per iniziare un nuovo progetto.

Leggi tutto “SOLIDWORKS API SDK: Visual Studio non mostra il Template”

VB.NET 5.0: Importare System.Printing

Come importare “System.Printing” in VB.NET 5.0

Dovendo utilizzare la classe “PrintTicket” in un’applicazione VB.NET con Framework in versione 5.0 per creare una Windows Form Application, mi sono scontrato con l’impossibilità di scrivere banalmente:

Imports System.Printing

Leggi tutto “VB.NET 5.0: Importare System.Printing”

VB.Net: Ottenere il percorso del programma al quale è associata un’estensione di file

Codice vb.net per ottenere il programma associato ad una estensione di file.

Ho tribolato abbastanza per trovare una soluzione decorosa al problema in oggetto e alla fine ne ho scritta una io che …

Leggi tutto “VB.Net: Ottenere il percorso del programma al quale è associata un’estensione di file”

VBA: Gestione di un Dizionario

No, non si tratta dell’oggetto Scripting.Dictionary – del quale, peraltro, vi consiglio l’uso, se potete – il cui utilizzo è ampiamente documentato in rete ma, bensì, una mia ristrettissima implementazione.

In pratica, senza dover caricare librerie aggiuntive (operazione che mi sembra abbia una pessima portabilità, tende a dare problemi appena si cambia PC con magari una versione Windows diversa), ho preferito crearmi io qualcosa di basato su quanto il linguaggio VBA offre.

Leggi tutto “VBA: Gestione di un Dizionario”